-
고용량 이미지 업로드 오류 해결 (Nginx 파일 업로드 용량 제한 설정)카테고리 없음 2020. 12. 8. 22:08
* 문제 발견
이미지 파일 업로드 기능을 구현하다가 문제를 발견했다. 특정 용량 이상의 이미지들이 업로드가 되지 않는 것이었다. 로컬에서 테스트할 때는 분명히 용량 문제같은건 없었는데, 테스트로 배포하고 나니 저용량 이미지가 아니면 업로드가 되지 않는다.
문제를 파악하기 위해 콘솔창을 확인해보았다. 콘솔에서는 CORS 에러를 반환하고 있었다. 조금 당황스러웠다. 이전까지 CORS 에러는 발생하지 않았기 때문이었다. 한참을 구글링하다가 다음과 같은 글을 발견했다.
forum.adonisjs.com/t/cors-error-with-big-file-upload/6538
해당 케이스는 CORS와는 관련이 없으며, 별도의 Nginx 설정을 하지 않는 이상, 기본 파일 업로드 용량이 1mb로 제한되어 있다는 것이다. 달리 말하면 이 부분만 설정해주면 문제를 해결할 수 있다는 의미다.
*
프로젝트는 현재 AWS Elastic Beanstalk을 통해 배포되어 있다. 검색을 해보니 다음과 같은 글을 찾았다. 내가 딱 원하던 케이스인 것 같다.
프로젝트 최상단에 .ebextensions 폴더를 만들고 하단에 config 파일을 만들어 아래 예시와 같이 설정한 뒤 배포하면 된다.
제시된 해결방법은 다음과 같다. 프로젝트 최상단에 .ebextensions 폴더를 만든다. 해당 폴더 하단에 config 파일을 만들어주면 된다. 예시에서는 01_files.config 파일이 설정되어 있지만, config 확장자를 가지고 있다면 이름은 자유롭게 설정해도 된다.
config 파일에서 아래 예시와 같이 Nginx 의 client_max_body_size를 설정해준다.
// 01_files.config files: "/etc/nginx/conf.d/proxy.conf" : mode: "000755" owner: root group: root content: | client_max_body_size 30M;
음? 그런데 배포를 해도 문제가 해결되지 않는다. 어디가 문제인걸까. Nginx를 리로드해야 한다는 이야기가 있어 config 내에 해당 명령어를 추가해보았다.
// 01_files.config files: "/etc/nginx/conf.d/proxy.conf" : mode: "000755" owner: root group: root content: | client_max_body_size 30M; container_commands: 01_reload_nginx: command: "sudo service nginx reload"
음, 여전히 해결되지 않는다. 한참을 구글링하다가 다시 다음 글을 찾았다.
문제는 AWS Elastic Beanstalk에서 사용하고 있는 인스턴스였다. Amazon Linux 버전에 따라 해결 방법이 달랐던 것.
사용하고 있는 인스턴스가 Amazon Linux 1인 경우에는 위와 같이 .ebextensions 위치에서 config 설정을 해주면 되지만, 내가 사용 중인 Amazon Linux 2의 경우에는 경로가 달랐던 것이다.
Amazon Linux 2의 경우는 프로젝트 최상단에 .ebextensions가 아닌 .platform 폴더를 만들어야 한다. 이후에는 .platform/nginx/conf.d 의 경로에 conf 파일을 만들어 원하는 설정을 넣어준다 (**config 파일이 아니라 conf 다)
conf 파일 내에는 원하는 크기가 담긴 딱 한 줄의 코드만 추가해준다.
client_max_body_size 30M;
위와 같이 설정해주고 배포하고 나니 1mb 이상의 파일도 슉슉 업로드가 된다. 속이 다 시원하다.