是否可以在没有负载均衡器的情况下使用带有 SSL (HTTPS) 的 Amazon Elastic Beanstalk?
Posted
技术标签:
【中文标题】是否可以在没有负载均衡器的情况下使用带有 SSL (HTTPS) 的 Amazon Elastic Beanstalk?【英文标题】:Is possible to use Amazon Elastic Beanstalk with SSL (HTTPS) without a Load Balancer? 【发布时间】:2018-02-28 17:44:04 【问题描述】:从现在开始,我的应用程序需要安全连接 (HTTPS)。我确认大多数在 Amazon Web Services Elastic Beanstalk 上添加安全连接 (https) 的教程都使用 Elastic Load Balancer 作为隧道。
在我的情况下,我运行的是单个实例,实际上我不需要负载均衡器。如何在没有 Elastic Load Balancer 的情况下向我的实例添加安全连接?这可能吗?
我正在使用运行 php 7.0 Elastic Beanstalk 的 64 位 Amazon Linux 2017.03 v2.4.4。
【问题讨论】:
【参考方案1】:目前 aws 文档适用于旧的 amazon linux,因此它们无法正常工作。
这是你应该做的:
-
在安全组中打开端口 443
在服务器上添加您的证书和私钥文件。您可以为此使用 .ebextensions。
在服务器上的/etc/nginx/conf.d中创建nginx conf文件,并使其监听443端口并使用您的证书文件加密连接。
在 proxy_pass 添加您的应用 (127.0.0.1:your_port)
您可以使用 ssh 创建 nginx conf 文件,也可以在应用的根文件夹中添加 .platform/nginx/conf.d 并在其中添加配置文件。
如果您喜欢更详细的说明,请点击此处: https://youtu.be/zTXS3a67-9c
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @legoscia 谢谢你的建议,我改了。【参考方案2】:https
可以在没有负载均衡器的情况下使用代理服务器进行配置,您的情况(使用 Amazon Linux 2+ 的 php)应该是 nginx
。我创建了一个gist
for configuring https
in EBS,它适合免费套餐???,但适用于 java。您可以看到更多examples here,但首先要找到您正在使用的代理服务器(apache 或 nginx),因为配置会相应变化。欲了解更多信息,请参阅Reverse proxy configuration
【讨论】:
【参考方案3】:编辑
您也可以为此使用 CloudFront。这也将允许您使用来自 Certification Manager 的认证。请记住在 N-Virginia 地区创建它们。
警告
CloudFront
和Elastic Beanstalk
之间的数据仍将通过http
进行交换,因为您的容器不支持https
。
您还需要更改以下设置:
在允许的 HTTP 方法下,您至少需要选择 GET, HEAD, OPTIONS
,但很可能您还需要 POST/PUT
您不希望 CloudFront 缓存您的结果,因此您需要将 Cache Policy
设置为 Managed-CachingDisabled
您还希望将所有请求的标头、cookie 和查询字符串传递给Origin
,即您的Elastic BeanStalk Container
。为此,您需要将 Origin Request Policy
设置为 Managed-AllViewer
【讨论】:
【参考方案4】:这绝对是可能的。这是来自 AWS 使用 Apache 的 example。
基本步骤是:
-
在服务器上启用 SSL
获取证书颁发机构 (CA) 签名的证书。出于测试目的,您可以创建自签名证书。这是一个example,介绍了如何使用 openssl 进行操作。
【讨论】:
请验证***.com/questions/46310436/… Smauel Neff 的回答是正确的。当使用像 Beanstalk 这样的托管资源同时使用像 ELB 这样的托管服务来处理 SSL 加密时,这无疑是 AWS 的最佳实践。但是,有可能不遵循这种做法并自己管理它。只需为您添加更多配置。以上是关于是否可以在没有负载均衡器的情况下使用带有 SSL (HTTPS) 的 Amazon Elastic Beanstalk?的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic Beanstalk - NodeJS:在没有 Beanstalk 负载均衡器的情况下从 Letsencrypt 获取证书 SSL
没有负载均衡器的 EC2 实例上的 AWS SSL - NodeJS