클라이언트의 브라우저에서 파일 업로드를 수행할 경우 파일 용량 제한에 에러가 발생할 수 있습니다. nginx를 사용중이라면 아래와 같은 에러가 발생합니다.


스크린샷) nginx 서버에 파일 업로드 크기에 따른 에러 발생

그렇다면 어떻게하면 에러를 해결할 수 있으며 원하는 파일 사이즈를 허용하도록 설정하는지 알아봅니다.



# nginx 서버 업로드 크기(사이즈) 설정하기
먼저 nginx의 파일 업로드 크기를 정해야합니다. 설정되지 않은 경우 1M가 넘는 경우 에러가 발생할 수 있습니다. 기본 사이즈의 경우 1Mbyte로 알고 있는데 특이한 점이 개발서버와 운영서버에 설정이 같음에도 개발서버에서는 에러가 발생하지 않더군요... nginx 설정 파일은 둘 다 확인했을때 동일하였던 점을 생각하면 다른 파일이나 버전등에 영향이 있지 않을까 생각됩니다. 어쨌든 이유를 막론 nginx의 허용사이즈를 설정하는 방법은 어떻게할까요?


! nginx 업로드 사이즈 설정하기
파일 업로드 사이즈를 설정하기 위해서는 먼저 nginx의 설정파일을 수정해야합니다. nginx.conf 파일은 아래의 경로에 있습니다. 읽기 전용이므로 root 계정이 필요합니다.
$ vim /etc/nginx/nginx.conf

설정된 부분으로 이동한 후 http { 내용 } 부분에 해당 속성과 값을 추가하거나 변경하도록 합니다. 이때 client_max_body_size 속성과 값을 설정해야합니다. 그럼 직접 수정해보도록하겠습니다. 예를들어 아래와 같이 값을 설정합니다. 만약 100Mbyte를 허용하는 경우라면 아래와 같겠죠.
@ nginx.conf
http {
  # Set client upload size - 100Mbyte
  client_max_body_size 100M;
  ...
  ..
  .
}

이제 업로드 크기가 설정되었습니다. nginx를 재시작합니다.
nginx -s reload

또는 service를 재시작할 수도 있겠죠.
service nginx restart

여기까지 수정 후 파일을 업로드 해보았습니다. 좀 전까지 1M 이상 파일 업로드시 에러가 발생했던 부분이 정상적으로 잘 동작하는군요! 이제 파일 업로드의 에러가 해결되었습니다.



# 마치면서파일 업로드 기능을 추가할 경우 client 브라우저에서도 설정합니다. 물론 서버에서 막아두는 방법이 좋지만 client에서 먼저 허용 크기를 설정하는 것이 더 좋겠죠. 불필요한 request를 줄일 수 있고 client의 불편함도 막을 수 있기 때문입니다.

또한 허용 크기가 없는 것 역시 문제이지만 너무 적절한 것도 문제입니다. 업로드하는 파일 타입 및 용도에 따라서 적절한 크기를 설정해야만 할 것입니다. 이미지라면 10Mbyte 이내가 충분할 수 있지만 psd 또는 ai 파일등이 허용되는 경우 그 크기는 훨씬 커지겠죠. 물론 썸네일 등의 프로필 이미지라면 1Mbyte 이내도 충분할 것입니다.