nginx 에서 파일을 업로드 하려고 하면 “413 Request Entity Too Large” 라는 에러 메세지나 워드프레스에서 “서버에서 예상하지 않은 응답이 있습니다.” 라는 오류가 발생할 때가 있습니다.
분명 php.ini 파일에서 업로드 용량 설정을 해준거 같은데 왜 이러는 걸까요. 오늘은 nginx를 운영하면서 꼭 한번은 보게 되는 에러인 Request Entity Too Large 에러를 해결해 보겠습니다.
참고:
워드프레스 – 최대 업로드 크기를 초과합니다 / php 업로드 설정
문제점 찾아보기
phpmyadmin 에서 업로드 최대 용량이 2MB로 되어 있다고 안내하고 있네요. 1.5MB 짜리 DB 파일을 가져와 보겠습니다.
오잉~!! 분명 용량제한 2MB 라고 했는데…
“413 Request Entity Too Large” 오류를 뿜어내고 있네요.
워드프레스 에서도 1.2메가 짜리 동영상을 업로드 해보겠습니다.
최대 업로드 용량 2MB로 설정되어 있는데도 불구하고
“서버에서 예상하지 않은 응답이 있습니다. 파일을 성공적으로 업로드했을 수도 있습니다. 미디어 라이브러리를 확인하거나 페이지를 새로 고치세요.” 라는 오류를 뿜어내고 있습니다.
호모나 세상에..
원인과 해결 방법 – nginx
이 문제는 nginx 용량 제한 설정 때문입니다. nginx는 아무런 설정을 하지 않으면 request 총 용량을 1MB 로 제한하고 있습니다.
그렇기 때문에 php.ini 파일에서 트래픽 용량을 높여 놨다 할지라도 nginx.conf 에도 설정 하지 않으면 에러가 발생하게 되는것 입니다.
nginx.conf 전송량 설정을 해보겠습니다.
설정할 지시문은 client_max_body_size 입니다. 아래의 예시처럼 추가해 주세요.
http {
# nginx를 통해서 이동하는 파일의 최대 크기
client_max_body_size 2048M;
# nginx를 통해서 이동하는 파일의 버퍼크기
proxy_max_temp_file_size 2048M;
}
http, server, location 항목 모두 설정 가능합니다.
http에 추가해서 서버 전체를 적용할 수 도 있고 server 블록에 추가하여 서버 별로 각각 설정할 수도 있고, location 에 추가하여 특정한 확장자만 개별로 설정할 수 있습니다.
참고로 한번에 업로드할 파일 용량이 1024MB 가 넘어가게 설정한다면
proxy_max_temp_file_size 도 함께 설정해 줘야 합니다.
왜냐면 Temp 폴더 디폴트 용량 설정이 1024MB 이기 때문입니다.