我正在使用Amazon EC2实例来托管我的Web应用程序 . EC2实例位于亚太地区 . 我想使用Amazon Certificate Manager的SSL证书 .
对于上面的场景,我必须选择Elastic Load Balancing选项或CloudFront .
由于我的实例位于亚太地区,我不能选择Elastic Load Balancing,因为负载均衡仅适用于美国东部(弗吉尼亚北部)地区的实例 .
另一种选择是去CloudFront . 如果我使用Amazon S3存储桶托管我的Web应用程序,CloudFront选项会更容易 . 但我正在使用EC2实例 .
我要求并在美国东部(弗吉尼亚北部)地区获得ACM证书 .
我继续使用CloudFront,并在原始路径的原始路径中输入了我的域名(example.com);我给出了应用程序目录(/ application)的位置,并填写了http和https端口 .
部署CloudFront分配时,我只能看到Web应用程序的默认自签名证书,而不是ACM证书 .
欢迎您提出意见和建议以解决此问题 . 谢谢 .
3 回答
Elastic Load Balancer适用于所有地区 . 它只在美国东部可用的假设是错误的 . 看看吧,也许这就解决了你的问题 .
关于SSL终止,您可以在ELB上启用该服务 .
如果在单个节点中,您可以在Web服务器本身上终止SSL,这是一种更便宜的解决方案 .
这是不正确的 . 原点需要是CloudFront可用于联系EC2实例的主机名 . 它不能是您的域名,因为一旦完成此设置,您的域名将直接指向CloudFront,因此CloudFront无法使用它来访问该实例 .
在这里,使用您的实例的公共DNS主机名,您可以在控制台中找到它 . 看起来像是ec2-x-x-x-x.aws-region.compute.amazonaws.com .
这也是不正确的 . 原始路径应留空 . 原始路径是您希望CloudFront预先添加到每个请求的字符串 . 如果将此项设置为
/foo
并且浏览器请求/bar
,则您的Web服务器将看到请求进入页面/foo/bar
. 可能不是你想要的 .在这里,您需要将原始协议策略设置为仅HTTP . 除非您的服务器上的证书有效且未自签名,否则CloudFront不会使用HTTPS与您的服务器 Build 后端连接 . 浏览器和CloudFront之间的连接仍然可以是HTTPS,但如果实例上没有有效证书,CloudFront将拒绝在后端 Build HTTPS连接 .
此外,在缓存行为下,您需要配置CloudFront以将所有请求标头转发到源服务器(这也禁用缓存,因此您可能不希望这样)或者您至少需要将
Host:
标头列入白名单,以便您的源服务器认可请求 . 添加您需要查看的任何其他标头,例如Referer
.如果需要,启用查询字符串转发 . 否则,CloudFront将删除
?your=query&strings=off_the_requests
,您的服务器将永远不会看到它们 .如果您的站点使用cookie,请配置您需要CloudFront转发或转发所有cookie的cookie .
这应该配置您的CloudFront分配,但尚未在您的网站上生效 .
这仅表示CloudFront已将您的设置部署到全球所有边缘位置,并且已准备好进行流量,而不是它实际上将接收任何流量 .
是的,因为您实际上没有将“example.com”的DNS更改为指向CloudFront而不是Web服务器 .
分发准备就绪后,您需要向其发送流量 . 在Route 53中,找到您站点的A记录,该记录将在框中显示EC2实例的IP地址,并且“别名”单选按钮设置为“否” . 将其更改为“是”,然后从显示的别名目标列表中选择CloudFront分配 . 保存更改 .
现在......在旧DNS条目的生存时间(TTL)计时器到期后,关闭浏览器(所有浏览器窗口),闭上眼睛,交叉手指,睁开眼睛,打开浏览器,然后点击您的网站 .
...应该通过CloudFront提供ACM证书 .
这可能听起来很复杂,但应该是你可以在更短的时间内完成的事情带我把这一切都搞定了 .
首先,非常感谢您抽出宝贵时间并帮助我完成查询 . 我继续你的建议 .
'此外,在缓存行为下,您需要将CloudFront配置为将所有请求标头转发到源服务器(这也禁用缓存,因此您可能不需要这样)或者您至少需要将Host:标头列入白名单,以便您源服务器识别请求 . 添加您需要查看的任何其他标头,例如Referer .
通过将主机列入白名单,我不知道你的意思 . 在白名单框下,我有什么 Value ?
由于我不确定将 Headers 列入白名单,因此我继续允许所有 Headers . 我转发了所有的cookie .
在原始设置中,我不知道在 Headers 名称和 Headers 值中给出了什么 . 所以,我将 Headers 名称命名为“header1”,并将值作为我的域名'www( . )example( . )com' .
我已按照您的建议在Route 53中进行了DNS更改 .
现在,当我单击www( . )example( . )com时,我能够看到带有效ACM证书的https://www.example(.)com .
但是,当我尝试访问我的应用程序https://www(.)example(.)com/application时,网页正在导航到https://ec2-x-x-x-x.ap-southeast-1.compute.amazonaws.com/application/,并且它再次显示自签名证书 .
我猜测亚马逊Route 53中的DNS配置存在一些问题 . 你能否告诉我我必须做哪些更改,以便在我点击我的应用程序时可以看到有效的证书?
此外,当我点击我的应用程序时,我的URL正在更改为显示ec2-x-x-x-x而不是我的域名?你能告诉我如何纠正吗?
非常感谢 .