背景
我的网站已成功使用 CloudFlare 和 Let's Encrypt 一两年了。网站托管在 EC2 上,它们拥有根、www 和所有使用的子域的有效 Let's Encrypt 证书。该网站由 Wordpress 运营。
我正在做什么
作为一项学习练习,我决定将我的一个域名 wildphotography.co.nz 更改为 Route53 和 CloudFront。但效果并不好。
问题
从 CloudFlare 迁移到 Route53 并使用 CloudFront 后,我无法查看我的网站。详情如下。我希望的最终状态是 Route53 成为我的 DNS 服务器,CloudFront 成为我的 CDN。
请注意,我已恢复使用 CloudFlare,因为我需要我的网站在线。我使用 Route53 作为我的 DNS 服务器已有 3-4 个小时,我可以看到它解析为 R53。
问题详细信息
设置完成后,我在浏览器中看到以下问题
由于 Route53 设置,域请求被发送到 CloudFront。CloudFront 提供的证书适用于 *.cloudfront.net 域。因此不匹配。我相信我理解这个问题,但我不知道如何解决它。
如果我访问 Cloudfront URL (d1b5f3w2vf82yc.cloudfront.net),就会出现此错误。当然,访问此 URL 通常不会有帮助。
以下是 SSL 诊断信息
这是我的 CloudFront 设置。请注意,我在更改了一些小内容后截取了屏幕截图,这就是为什么它显示“正在进行中”。我在测试之前让它传播。
首先是 CloudFront 概述
CloudFront 源设置
CloudFront 根行为
请注意,我在 Nginx Web 服务器上从 http 转发到 https,因此我不必费心让 CloudFront 执行此操作。这为我的日志提供了更多信息,对诊断很有用。
Route53 设置
我删除了一些与电子邮件相关的不相关记录。请注意,www 和非 www 域都是指向 CloudFront 分发的别名记录。它不会接受 cname 别名 - 我甚至不确定这是否是有效的组合。
我尝试过的方法
我创建了一个新的子域名 origin.wildphotography.co.nz,它是 www.wildphotography.co.nz 的别名。我认为这是必要的,这样 CloudFront 才能找到原始服务器的 IP。
我尝试过 CNAME、别名和非别名等各种各样的东西。
奇怪的是,当仍然使用 R53/CloudFront 设置时,一些请求会通过 CloudFront 发送。虽然不多,但还是有一些。
任何想法都将不胜感激。我怀疑我的 Route53 设置不正确。
答案1
首先,您需要将自定义 SSL 证书上传到 Cloudfront,以避免 SSL 验证期间出现问题。如果您没有上传对您的网站名称有效的自定义证书,Cloudfront 会提供仅对其自己的域名 cloudfront.net 有效的证书。
然后,您需要 Route53 中 DNS 区域中的几个记录:
- 公共网站记录(“www”和顶尖)应指向您的 Cloudfront 分布。
- 您的 Cloudfront 源设置需要另一个辅助记录(例如“源”),因为 Cloudfront 不允许 IP 源。此辅助记录应指向您的实际 Web 服务器。您必须配置您的分发以转发 Host 标头,以便您的 Web 服务器能够提供正确的内容。
通过此设置,您的客户将通过您的 www/apex 记录路由到 Cloudfront,而 Cloudfront 将通过源记录定位实际的 Web 服务器。Clodflare 让您无需实现所有这些逻辑,因为您将 DNS 委托给他们,但实际上,当您在 DNS 面板中启用 CDN 功能时,他们在后台执行此操作。
答案2
请注意,您还可以通过 ACM 从 AWS 获取证书,无需额外付费。您获得的证书随后可以部署到您域的 CloudFront 上。有关详细信息,请访问 -http://docs.aws.amazon.com/acm/latest/userguide/gs-cf.html并阅读博客文章 -https://aws.amazon.com/blogs/aws/new-aws-certificate-manager-deploy-ssltls-based-apps-on-aws/