プロキシサーバーを設定する - AWS Elastic Beanstalk

プロキシサーバーを設定する

Elastic Beanstalk では、リバースプロキシとして nginx または Apache HTTPD を使用して、ポート 80 の Elastic Load Balancing ロードバランサーにアプリケーションをマッピングできます。デフォルトは nginx です。Elastic Beanstalk にはデフォルトのプロキシ設定が用意されています。これは拡張することも、独自の設定で完全に上書きすることもできます。

デフォルトでは、Elastic Beanstalk はポート 8080 でアプリケーションにリクエストを送信するようプロキシを設定します。デフォルトのポートを上書きするには、PORT 環境プロパティを、主要なアプリケーションがリッスンするポートに設定します。

注意
  • アプリケーションがリッスンしているポートは、ロードバランサーからリクエストを受信するために nginx サーバーがリッスンするポートに影響を与えません。

  • Amazon Linux AMI Node.js プラットフォームバージョン (Amazon Linux 2 より前) では、Elastic Beanstalk はポート 8081 でアプリケーションにリクエストを転送するようプロキシを設定します。手順については、このページの「(Amazon Linux 2 より前の) Amazon Linux AMI でのプロキシの設定」を参照してください。

すべての Amazon Linux 2 プラットフォームでは、統一されたプロキシ設定機能がサポートされています。Amazon Linux 2 を実行する新しい Amazon Corretto プラットフォームバージョンでプロキシサーバーを設定する方法については、Elastic Beanstalk Linux プラットフォームの拡張 の「リバースプロキシの設定」 セクションを展開してください。

(Amazon Linux 2 より前の) Amazon Linux AMI でのプロキシの設定

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 は、各構成がデプロイされるときにデフォルト設定を再作成します。これを考慮して、次の例では、設定のデプロイ後のフック (/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh) が追加されます。これにより、デフォルト設定が削除され、プロキシサーバーが再起動されます。

注記

デフォルト設定は、今後のバージョンの Node.js プラットフォームで変更される可能性があります。カスタマイズのベースとして、最新バージョンの設定を使用して互換性を確保します。

デフォルト設定をオーバーライドする場合は、静的ファイルマッピングと GZIP 圧縮を定義する必要があります。これは、プラットフォームが標準設定を適用できないためです。