AWS Elastic Beanstalk
開発者ガイド

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

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 設定では、nodejs にある 127.0.0.1:8081 という名前のアップストリームサーバーにトラフィックを転送します。デフォルト設定を削除し、設定ファイルに独自の設定を指定することができます。

例 .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 圧縮を定義する必要があります。