์น ์๋ฒ์์ ํ์ผ ์ ๋ก๋ ๋๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ค ํ ๋, ์๋์ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ง์ฃผํ ์ ์์ผ์ ๊ฐ์?
413 Request Entity Too Large
์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ๋ณด๋ธ ์์ฒญ ๋ณธ๋ฌธ(request body)์ ํฌ๊ธฐ๊ฐ Nginx๊ฐ ํ์ฉํ๋ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ์ ๋ ๋ฐ์ํ๋ ์ค๋ฅ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Nginx๋ 1MB๊น์ง๋ง ํ์ฉํฉ๋๋ค.
๐ ์๋ฌ ์ํฉ ์์
์ ๋ /api/parse ๋ผ๋ ๊ฒฝ๋ก๋ก Flask ์ฑ์ ์์ฒญ์ ๋ณด๋ด๋ ํ๊ฒฝ์์ ์ด ๋ฌธ์ ๋ฅผ ๊ฒช์์ต๋๋ค. POST ์์ฒญ์ผ๋ก PDF๋ ์ด๋ฏธ์ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ๋ฐ์ํ์ฃ .
location /api/parse {
proxy_pass http://localhost:8088/parse;
...
}
๐ง ํด๊ฒฐ ๋ฐฉ๋ฒ: client_max_body_size ์ค์ ์ถ๊ฐ
Nginx ์ค์ ์์ ํด๋น location ๋ธ๋ก์ ์๋ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค:
client_max_body_size 50M;
์์: ์ ์ฒด location ๋ธ๋ก ์์
location /api/parse {
client_max_body_size 50M; # โ ์์ฒญ ์ต๋ ํฌ๊ธฐ๋ฅผ 50MB๋ก ์ค์
proxy_pass http://localhost:8088/parse;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
๐ ์ค์ ์ ์ฉ ์์
- ์ค์ ํ์ผ ์ ์ฅ
- ๋ฌธ๋ฒ ์ฒดํฌ:
- sudo nginx -t
- ์๋ฒ ์ฌ์์ ๋๋ reload:
- sudo systemctl reload nginx
๐ ์ถ๊ฐ ํ: Flask ์ฑ์ ๋ณธ๋ฌธ ํฌ๊ธฐ ์ ํ๋ ํ์ธ!
Flask์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณธ๋ฌธ ํฌ๊ธฐ ์ ํ์ด ์์ง๋ง, request.data๋ฅผ ์ง์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ผ๋ฉด WSGI ์๋ฒ(Gunicorn ๋ฑ)์์๋ ์ ํ์ ๊ฑธ์ด๋ ์ ์์ต๋๋ค. ์ด ๋ถ๋ถ๋ ํจ๊ป ์ ๊ฒํด๋ณด์ธ์.
์ด์ ๋ค์ ์์ฒญ์ ๋ณด๋ด๋ณด๋ฉด ๋ ์ด์ 413 ์ค๋ฅ ์์ด ํ์ผ ์ ๋ก๋๋ ๋์ฉ๋ JSON ์์ฒญ์ด ์ ์ฒ๋ฆฌ๋ ๊ฑฐ์์. ๋ง์ฝ ์ ๋ก๋ ์ฉ๋์ด ๋ ํฌ๋ค๋ฉด 100M, 200M ๋ฑ์ผ๋ก ์กฐ์ ํ์๋ฉด ๋ฉ๋๋ค.