JUINTINATION
AWS 엘라스틱빈스톡 413 Request Entity Too Large 오류 본문
이번에 해커톤 및 종설 준비를 하면서 스프링부트로 만든 API 서버를 엘라스틱빈스톡으로 배포했다. 로컬 환경에서 리액트, 플라스크 서버를 포함하여 모두 정상적으로 작동하는 것을 확인한 후에 배포했는데 동영상 파일을 전송하는 과정에서 오류가 발생했다.
413 request entity too large
<html>
<head><title>413 request entity too large</title></head>
<body>
<center><h1>413 request entity too large</h1></center>
<hr><center>nginx</center>
</body>
</html>
get 요청으로 서버로 잘 접속이 되는 것 또한 확인했는데.. 이런 오류가 뜨는 이유가 무엇일까 고민하면서 폭풍 삽질을 시작했다.
해당 오류는 엘라스틱빈스톡에서 사용하는 NginX의 기본 설정 값으로 인해 1MB를 초과하는 파일을 POST 요청으로 업로드하는 상황에 발생하는 오류라고 한다. NginX의 설정 값 중 client_max_body_size
를 수정해야 하는데 여러 블로그들을 참고했지만 결정적으로 이 오류를 해결해준 블로그는 다음 3곳이다.
- https://blog.choyoungil.com/2021/08/06/aws-elastic-beanstalk-413-request-entity-too-large-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0/
- https://blog.leocat.kr/notes/2020/04/21/nginx-413-request-entity-too-large
- https://tilnote.io/pages/643f323ee3a729bdebcb8ef8
해결 과정
AWS Elastic Beanstalk 공식 문서 중 Extending Elastic Beanstalk Linux platforms를 보면 my-app에서 아래와 같은 경로에 NginX 설정 파일을 추가하여 배포되는 환경의 NginX 설정을 수정할 수 있다고 한다.
~/my-app/
|-- web.jar
|-- Procfile
|-- other source files
`-- .platform/
|-- nginx/
| |-- nginx.conf
| `-- conf.d/
| `-- custom.conf
|-- other source files
처음에 이걸 보고 nginx 폴더에 conf.d 폴더 안에 custom.conf 파일을 추가하면 되겠구나 하고 삽질을 오래 했는데.. 아니었다. custom.conf(이하 myconf.conf) 파일은 아래와 같은 경로에 위치했어야 했다.
/etc/nginx/conf.d/myconf.conf
위 위치에서는 myconf.conf(파일명은 상관 없음)의 내용으로 원하는 최대 용량으로 아래와 같이 작성해야 한다.
client_max_body_size 30M;
30M이면 30MB이며, 0으로 지정하면 무제한으로 설정할 수 있다.
이후에 $ sudo service nginx reload
명령어로 NginX 설정을 재시작해주어야 한다.
실제로 내가 터미널로 실행한 내용인데 먼저 $ sudo find / -name nginx.conf
명령어로 nginx.conf 파일이 위치한 디렉터리 중 /ect/nginx/conf.d
디렉터리로 이동한 후 $ sudo vi myconf.conf
명령어로 설정 파일을 작성한 뒤 NginX 설정을 재시작해주었다.
결론
그런데 Elastic Beanstalk은 원래 파일 하나를 올리고 배포 버튼 한 번만 딸깍 하면 되는 편한 것인데, 위와 같이 직접 nginx 설정을 건드리는 것은 올바르지 않다는 생각이 들었다. 그러면서 다른 블로그를 또 참고하면서 zip 파일로 압축해서 배포해보는 등 여러 방법을 시도했는데 전부 Degraded가 떴다. 사실 지난 GitHub Actions를 활용한 CI/CD 배포에서 작성한 것처럼 모든 설정 파일을 작성하면 될 것 같기도 한데 과금 이슈로 인해 일단은 단순 배포가 목적이어서.. 나중에 이 문제도 해결이 된다면 내용 추가하도록 하겠다..
그리고 지금 Flask 서버도 엘라스틱빈스톡으로 배포하려고 했는데 Tensorflow 설치를 OS에서 막아둔 것 같아서 빼고 올리려고 했는데도 실패한다. 그래서 EC2 인스턴스로 올려두기만 했는데 관련해서 해결 방법 아시는 분은 연락 부탁드립니다..
리액트 파일도 엘라스틱빈스톡으로 배포하면 되기는 하는데 상태가 Warning으로 나와서.. 정말 알다가도 모르겠다!!
'Amazon Web Services' 카테고리의 다른 글
AWS 엘라스틱빈스톡으로 React 프로젝트 배포하기 (1) | 2024.11.05 |
---|---|
AWS Ubuntu 22.04 LTS EC2 파이썬 버전 변경하기 (5) | 2024.10.26 |
GitHub Actions를 활용한 CI/CD 배포 (0) | 2024.07.19 |
CI/CD(지속적 통합/지속적 배포)란? (1) | 2024.07.19 |
AWS 엘라스틱빈스톡과 RDS(MariaDB) 연동하기 (1) | 2024.07.18 |