프록시 서버 구성 - AWS Elastic Beanstalk

프록시 서버 구성

Elastic Beanstalk는 nginx 또는 Apache HTTPD를 역방향 프록시로 사용하여 애플리케이션을 포트 80의 Elastic Load Balancing 로드 밸런서에 매핑할 수 있습니다. 기본값은 nginx입니다. Elastic Beanstalk는 확장하거나 자체 구성으로 완전히 재정의할 수 있는 기본 프록시 구성을 제공합니다.

기본적으로 Elastic Beanstalk는 요청을 포트 8080의 애플리케이션에 전달하도록 프록시를 구성합니다. PORT 환경 속성을 기본 애플리케이션이 수신 대기하는 포트로 설정하여 기본 포트를 재정의할 수 있습니다.

Notes
  • 애플리케이션이 수신 대기하는 포트는 nginx 서버가 로드 밸런서에서 요청을 받기 위해 수신 대기하는 포트에 영향을 주지 않습니다.

  • Amazon Linux AMI Node.js 플랫폼 버전(이전 Amazon Linux 2)에서 Elastic Beanstalk는 포트 8081에서 애플리케이션에 요청을 전달하도록 프록시를 구성합니다. 자세한 내용은 이 페이지의 Amazon Linux AMI(이전 Amazon Linux 2)에서 프록시 구성 단원을 참조하세요.

모든 Amazon Linux 2 플랫폼은 균일한 프록시 구성 기능을 지원합니다. Amazon Linux 2를 실행하는 새 Amazon Corretto 플랫폼 버전에서 프록시 서버를 구성하는 방법에 대한 지침을 보려면 Elastic Beanstalk Linux 플랫폼 확장역방향 프록시 구성 섹션을 확장하세요.

Amazon Linux AMI(이전 Amazon Linux 2)에서 프록시 구성

Elastic Beanstalk Node.js 환경에서 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 이 단원의 정보를 읽어 보십시오.

Node.js 플랫폼은 역방향 프록시를 사용하여 인스턴스에서 포트 80의 요청을 포트 8081에서 수신 중인 애플리케이션으로 전달합니다. Elastic Beanstalk는 확장하거나 자체 구성으로 완전히 재정의할 수 있는 기본 프록시 구성을 제공합니다.

기본 구성을 확장하려면 구성 파일로 .conf/etc/nginx/conf.d 파일을 추가합니다. 구체적인 예제는 Node.js를 실행하는 EC2 인스턴스에서 HTTPS 종료 단원을 참조하세요.

Node.js 플랫폼은 PORT 환경 변수를 프록시 서버가 트래픽을 전달할 포트로 설정합니다. 이 코드 변수를 읽고 애플리케이션의 포트를 구성합니다.

var port = process.env.PORT || 3000; var server = app.listen(port, function () { console.log('Server running at http://127.0.0.1:' + port + '/'); });

기본 NGINX 구성은 127.0.0.1:8081의 업스트림 서버(nodejs)로 트래픽을 전달합니다. 기본 구성을 제거하고 구성 파일에 사용자 지정으로 구성할 수 있습니다.

예 .ebextensions/proxy.config

다음은 기본 구성을 제거하고 트래픽을 8081 대신 포트 5000으로 전달하도록 사용자 지정한 구성을 추가하는 예제입니다.

files: /etc/nginx/conf.d/proxy.conf: mode: "000644" owner: root group: root content: | upstream nodejs { server 127.0.0.1:5000; keepalive 256; } server { listen 8080; if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; } access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; access_log /var/log/nginx/access.log main; location / { proxy_pass http://nodejs; proxy_set_header Connection ""; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } gzip on; gzip_comp_level 4; gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; location /static { alias /var/app/current/static; } } /opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh: mode: "000755" owner: root group: root content: | #!/bin/bash -xe rm -f /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf service nginx stop service nginx start container_commands: removeconfig: command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"

예제 구성(/etc/nginx/conf.d/proxy.conf)은 /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf의 기본 구성을 토대로 기본 서버 블록과 압축 및 로그 설정, 정적 파일 매핑을 포함합니다.

removeconfig 명령은 프록시 서버가 사용자 지정 구성을 사용하도록 컨테이너의 기본 구성을 제거합니다. Elastic Beanstalk는 각 구성이 배포될 때 기본 구성을 다시 만듭니다. 이 문제를 설명하기 위해 다음 예에서는 post-configuration-deployment hook(/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh)가 추가됩니다. 이렇게 하면 기본 구성이 제거되고 프록시 서버가 다시 시작됩니다.

참고

기본 구성은 이후 Node.js 플랫폼 버전에서 바뀔 수 있습니다. 사용자 지정할 때는 호환성이 보장되도록 최신 버전의 구성을 사용하십시오.

기본 구성을 재정의하는 경우 정적 파일 매핑과 GZIP 압축을 정의해야 합니다. 이는 플랫폼이 표준 설정을 적용할 수 없기 때문입니다.