AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

配置代理服务器

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

以下示例将删除默认配置并添加一个将流量转发到端口 5000 (而不是 8081) 的自定义配置。

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 压缩,因为该平台将不能应用标准设置