프록시 서버 구성 - AWS Elastic Beanstalk

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

프록시 서버 구성

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

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

참고

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

플랫폼 버전에서 프록시 서버 구성

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

Elastic Beanstalk Node.js 환경에서 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 이 섹션의 정보를 읽어 보세요.

주의
  • 이 주제의 정보는 Amazon Linux AMI(AL1) 기반 플랫폼 브랜치에만 적용됩니다. AL2023/AL2 플랫폼 브랜치는 이전 Amazon Linux AMI(AL1) 플랫폼 버전과 호환되지 않으며 다른 구성 설정이 필요합니다.

  • 2022년 7월 18일 Elastic Beanstalk는 Amazon Linux AMI(AL1) 에 기반한 모든 플랫폼 브랜치의 상태를 사용 중지로 설정했습니다. 완전 지원이 가능한 현재 Amazon Linux 2023 플랫폼 브랜치로 마이그레이션하는 방법에 대한 자세한 내용은 Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2023 또는 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:8081nodejs라는 업스트림 서버로 트래픽을 전달합니다. 기본 구성을 제거하고 구성 파일에 사용자 지정으로 구성할 수 있습니다.

예 .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 압축을 정의해야 합니다. 이는 플랫폼이 표준 설정을 적용할 수 없기 때문입니다.