[Nginx] 413 Request Entity Too Large 문제 해결

작성: 2023.12.19

수정: 2023.12.19

읽는시간: 00 분

Development/Daily Error

반응형

Intro

스프링부트 서버 + 앞단에 Nginx 가 있는 구조에서 Post 요청으로 파일을 업로드 하는데 413 에러가 발생했다.

파일 사이즈가 그닥 크지는 않았는데도, 1MB 만 넘으면 여지없이 413 에러가 발생했다. 로컬에서 테스트할땐 괜찮았는데, 개발서버에 배포하고 테스트 할 때 문제가 발생했다.

원인

개발서버에서는 앞단에 Nginx가 한개가 더 추가되어있는데, 그래서 웹서버의 설정 문제임을 짐작 할 수 있었다.

nginx 문서 에서 client_max_body_size 항목을 찾아보면, 기본값이 1MB 라고 한다.

image-20231219171210136

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

반응형