AWS Elastic Beanstalk nginx 옵션 추가 하기
회사에 입사하고 거의 1년이 되어가는 시간동안 기존 서비스에서 nginx 기본 설정 파일 사이즈 이상의 파일을 업로드 한 적이 없었습니다.
그러던 어느날 더이상 회피 할 수 없이 꼭 방법을 찾아야만 하는 날이 오고 말았고.. 열심히 문서를 뒤지고 방법을 찾는 몇일이 반복 되었습니다.
결과적으로 성공했지만 같은 뻘짓을 두번 다시 하고 싶지 않아서 기록을 남깁니다.
먼저 Elastic Beanstalk 은 이런 것 입니다.
사내 백엔드 배포 과정은 다음과 같습니다.
- Default Branch 에 Push 가 들어오면 배포 타이밍이라고 판단해 GitHub Actions 를 실행합니다.
- GitHub Actions 에서 Dockerfile 을 읽어 도커 파일을 빌드 합니다.
- 빌드 할 때 내장된 master.key 를 GitHub secrets 에서 읽어들여 같이 빌드 합니다.
- 빌드된 도커 파일을 GitHub Packages 에 업로드 합니다.
- GitHub Actions 에서 AWS EB Cli 를 설치해 deploy/master 폴더 안에 정리해둔 AWS Elastic Beanstalk 설정 파일을 읽고 배포를 시작합니다.
- 배포가 완료되면 Slack Webhook 을 실행시켜 배포 완료 메세지를 전송 합니다.
이렇게 배포가 완료됩니다.
AWS Elastic Beanstalk 줄여서 eb 에서는 nginx 를 기본 웹 프록시 서버로 사용하고 있어 nginx 옵션을 추가하는 방법이 굉장히 쉬울거라고 생각했지만 생각보다 방법을 찾는건 어려웠습니다.
기본적으로 eb 설정 파일은 다음과 같은 형태를 가집니다.
- 01-nginx-proxy.config 에서는 nginx 설정
- config.yml 에서는 eb 설정
- Dockerrun.aws.json 은 도커 파일 설정
이렇게 분류가 된다고 볼 수 있습니다.
처음 접근은 01-nginx-proxy.config 에 접근해봤지만 수정은 이루어지지 않았습니다.
해당 설정 폴더에서 다음처럼 폴더를 생성하고 proxy.conf 파일을 생성해 내용을 작성하면 원하는 설정이 추가가 됩니다.
저는 이 한줄이 필요했습니다.
client_max_body_size 0;
간단하게 생각을 해보면 01-nginx-proxy.config 에서 미리 지정된 conf 파일을 부르는 주소에 파일 하나를 더 생성해서 같이 부르면 되는 문제였습니다.
files:
"/etc/nginx/conf.d/01_nginx_proxy.conf":
mode: "000744"
owner: root
group: root
content: |
server {
listen 80;
client_max_body_size 100M;
set $redirect_to_https 0;
if ($http_x_forwarded_proto != 'https') {
set $redirect_to_https 1;
}
if ($request_uri = '/') {
set $redirect_to_https 0;
}
if ($redirect_to_https = 1) {
rewrite ^(.*) https://$host$1 redirect;
}
location / {
proxy_pass http://docker;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
해결하고 나중에 되돌아보니 너무 간단해서 허비한 시간이 허무해지는 일감이였습니다.