[Nginx] 413 Request Entity Too Large 문제 해결
Intro
스프링부트 서버 + 앞단에 Nginx 가 있는 구조에서 Post 요청으로 파일을 업로드 하는데 413 에러가 발생했다.
파일 사이즈가 그닥 크지는 않았는데도, 1MB 만 넘으면 여지없이 413 에러가 발생했다. 로컬에서 테스트할땐 괜찮았는데, 개발서버에 배포하고 테스트 할 때 문제가 발생했다.
원인
개발서버에서는 앞단에 Nginx가 한개가 더 추가되어있는데, 그래서 웹서버의 설정 문제임을 짐작 할 수 있었다.
nginx 문서 에서 client_max_body_size
항목을 찾아보면, 기본값이 1MB 라고 한다.
If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client.
요청이 사이즈 제한을 넘어서면 413 에러가 발생한다고 나와 있다. 기본 값은
1m;
(1MB) 라고 한다.
기존에 하나있는 nginx 에서는 client_max_body_size 0;
로 제한 없이 설정을 해 두었는데, 새로 추가한 웹서버가 기본 설정으로 크기 제한이 들어가면서 요청을 거부한 것.
해결
nginx 설정에 client_max_body_size 0;
를 추가 해서 바디 사이즈 제한을 해제한다.
따로 기입되어있지 않으면 1메가 제한이 걸리기 때문에, 그대로 두면 또 에러가 발생할 것이다. 물론 파일 업로드 때문이라면 TUS 프로토콜같은 것을 사용하여 청크 사이즈를 줄이는 방법이 있기는 하지만 아무래도 1메가는 좀 작긴 하다.
제한 없이 설정하기가 꺼림칙하다면 아래처럼 10메가 정도로 하는 방법도 있다.
http {
...
client_max_body_size 10m;
server {
...
}
...
하지만 기본값에서 413을 만났다면 10m에서도 만날 확률이 매우 높으니 알아서 잘 조절하자.
References