JoungSik/AWS Elastic Beanstalk nginx 옵션 추가 하기

Created Wed, 03 Nov 2021 23:59:59 +0900 Modified Sat, 31 Dec 2022 01:31:35 +0900

AWS Elastic Beanstalk nginx 옵션 추가 하기

회사에 입사하고 거의 1년이 되어가는 시간동안 기존 서비스에서 nginx 기본 설정 파일 사이즈 이상의 파일을 업로드 한 적이 없었습니다.

그러던 어느날 더이상 회피 할 수 없이 꼭 방법을 찾아야만 하는 날이 오고 말았고.. 열심히 문서를 뒤지고 방법을 찾는 몇일이 반복 되었습니다.

결과적으로 성공했지만 같은 뻘짓을 두번 다시 하고 싶지 않아서 기록을 남깁니다.

먼저 Elastic Beanstalk 은 이런 것 입니다.

사내 백엔드 배포 과정은 다음과 같습니다.

  1. Default Branch 에 Push 가 들어오면 배포 타이밍이라고 판단해 GitHub Actions 를 실행합니다.
  2. GitHub Actions 에서 Dockerfile 을 읽어 도커 파일을 빌드 합니다.
    1. 빌드 할 때 내장된 master.key 를 GitHub secrets 에서 읽어들여 같이 빌드 합니다.
  3. 빌드된 도커 파일을 GitHub Packages 에 업로드 합니다.
  4. GitHub Actions 에서 AWS EB Cli 를 설치해 deploy/master 폴더 안에 정리해둔 AWS Elastic Beanstalk 설정 파일을 읽고 배포를 시작합니다.
  5. 배포가 완료되면 Slack Webhook 을 실행시켜 배포 완료 메세지를 전송 합니다.

이렇게 배포가 완료됩니다.

AWS Elastic Beanstalk 줄여서 eb 에서는 nginx 를 기본 웹 프록시 서버로 사용하고 있어 nginx 옵션을 추가하는 방법이 굉장히 쉬울거라고 생각했지만 생각보다 방법을 찾는건 어려웠습니다.

기본적으로 eb 설정 파일은 다음과 같은 형태를 가집니다.

1

  • 01-nginx-proxy.config 에서는 nginx 설정
  • config.yml 에서는 eb 설정
  • Dockerrun.aws.json 은 도커 파일 설정

이렇게 분류가 된다고 볼 수 있습니다.

처음 접근은 01-nginx-proxy.config 에 접근해봤지만 수정은 이루어지지 않았습니다.

해당 설정 폴더에서 다음처럼 폴더를 생성하고 proxy.conf 파일을 생성해 내용을 작성하면 원하는 설정이 추가가 됩니다.

2

저는 이 한줄이 필요했습니다.

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;
        }
      }

해결하고 나중에 되돌아보니 너무 간단해서 허비한 시간이 허무해지는 일감이였습니다.