我想为我在 AWS Elastic Beanstalk 中运行的应用程序配置 SSL 证书。
简短描述
要为您在 Elastic Beanstalk 中运行的应用程序启用 SSL 加密,请执行以下操作之一:
- 在负载均衡器级别终止 HTTPS
- 在实例级别终止 HTTPS
- 将 HTTP 重定向到 HTTPS
解决方法
在负载均衡器级别终止 HTTPS
要将您的 Elastic Beanstalk 环境更新为使用 HTTPS,必须在您的环境中为负载均衡器配置 HTTPS 侦听器。有两种类型的负载均衡器支持 HTTPS 侦听器:
有关详细信息,请参阅配置 Elastic Beanstalk 环境的负载均衡器以终止 HTTPS。
在实例级别终止 HTTPS
要在单实例环境中使用 HTTPS 或配置负载均衡器以在无需解密的情况下传输流量,您可以使用平台钩子。可使用平台钩子配置向应用程序传输流量的代理服务器以终止 HTTPS 连接。钩子文件取决于 Elastic Beanstalk 平台的类型。有关详细信息,请参阅配置应用程序以在实例上终止 HTTPS 连接。
**注意:**由于 Amazon Linux AMI(AL1)平台已停用,因此最佳做法是使用平台钩子向代理服务器添加更改。将之前在 AL1 平台 .ebextensions/nginx 目录中提供的代理配置文件移至 AL2 中的 platform/nginx 平台钩子目录。要扩展 Elastic Beanstalk 默认 NGINX 配置,请将 .conf 配置文件添加到应用程序源捆绑包中名为 .platform/nginx/conf.d/ 的文件夹中。Elastic Beanstalk NGINX 配置会自动在此文件夹中包含 .conf 文件:
~/workspace/my-app/
|-- .platform
| `-- nginx
| `-- conf.d
| `-- myconf.conf
`--
要覆盖 Elastic Beanstalk 默认 NGINX 配置,请在源捆绑包中包含配置 .platform/nginx/nginx.conf:
~/workspace/my-app/
|-- .platform
| `-- nginx
| `-- nginx.conf
`--
如果覆盖 Elastic Beanstalk NGINX 配置,则拉入 Elastic Beanstalk 配置。拉入配置后,可以使用增强型运行状况报告和监控、自动应用程序映射和静态文件功能。要拉入配置,请在 nginx.conf 中添加以下行:
include conf.d /elasticbeanstalk/ *.conf;
有关如何配置代理的详细信息,请参阅反向代理配置。
**注意:**您可能会在代理错误日志中看到以下警告:nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive。为避免出现此警告,请使用以下 .conf 文件并将其存储在平台钩子文件夹中,以在实例级别终止 SSL:
listen 443 ssl;
server_name localhost;
location / {
proxy_pass http://localhost:app_port;
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;
proxy_set_header X-Forwarded-Proto https;
}
}
将 HTTP 重定向到 HTTPS
HTTP 到 HTTPS 的重定向处理客户端发起的非安全流量,并将流量重定向到 HTTPS。如果您要使用应用程序负载均衡器或单个实例进行重定向,请参阅配置 HTTP 到 HTTPS 的重定向。
默认情况下,经典负载均衡器无法将 HTTP 流量重定向到 HTTPS。因此,您需要为应用经典负载均衡器的 Web 服务器实例配置重写规则。有关详细信息,请参阅如何在经典负载均衡器上将 HTTP 流量重定向到 HTTPS?