带有 S3 存储桶的 CNAME

带有 S3 存储桶的 CNAME

我有一个网站,我想将其图像移动到 AWS S3。假设它被调用mypage.com,我可以像这样访问图像:

https://mypage.com/pics/one.jpg

我创建了一个名为的存储桶static.mypage.com来将所有图像放在那里,所以现在我可以像这样访问这些图像:

https://static.mypage.com.s3.eu-west-1.amazonaws.com/pics/one.jpg

由于这个名字很长,所以我想使用 DNS 的“缩短器”。

因此,我想知道如何在我的 DNS 提供商中设置 CNAME,以便如果我去...

https://static.mypage.com/pics/one.jpg

...我会从存储桶中获取图像。

谢谢!

答案1

过去 S3 支持FQDN 存储桶名称- 即您所需要的。其中 FQDN = 完全限定域名,即完整主机名,如static.mypage.com。问题是这只适用于 HTTP,而不适用于 HTTPS,因为没有办法让 S3 使用带有存储桶名称/主机名的 SSL 证书(static.mypage.com)。

如果您对仅 HTTP 流量感到满意,您仍然可以这样做。只需static.mypage.com在您的注册商处创建一个指向的 CNAME。S3s3.eu-west-1.amazonaws.com将识别Host:请求中的标头并查看正确的 S3 存储桶。只要存储桶中的对象可公开访问,URLhttp://static.mypage.com/pics/one.jpg应该可以正常工作。

但是,只要你通过 HTTPS 访问,就会收到 SSL 证书验证错误,因为 S3 证书中的主机名 *.s3.eu-west-1.amazonaws.com不符合预期static.mysite.com

解决方案是 CloudFront它可以位于你的 S3 前面并为其处理正确的 SSL 证书:

  1. 创建免费 SSL 证书static.mysite.com亚马逊证书管理器(或者将第三方颁发的 SSL 证书上传到 ACM)。
  2. 建立一个CloudFront 分配,将 SSL 证书附加到其中
  3. 配置 CloudFront 分发以使用您的 S3 存储桶作为起源
  4. 配置一个static.mysite.comDNS 提供商处的 CNAME 指向 CF 分发名称,例如d123456abcdef.cloudfront.net
  5. 你想要的 URLhttps://static.mypage.com/pics/one.jpg最终应该可以工作。

另请参阅将流量路由到托管在 Amazon S3 存储桶中的网站

希望有帮助:)

答案2

登录到您的网络主机控制面板并选择“管理 DNS 服务器设置”或类似选项为您的域名创建一个新的 CNAME 条目。以 static.mypage.com 为例,条目如下:

Name: static
Type: CNAME
Value: s3-external-3.amazonaws.com.

(如果您是美国用户,请改用 s3.amazonaws.com。)是的,“s3-external-3.amazonaws.com。”末尾的点是正确的,对于我的网络主机而言。查看您的其他条目,找出您应该为您的网络主机输入什么。

请参阅此处了解更多信息 https://carltonbale.com/how-to-alias-a-domain-name-or-sub-domain-to-amazon-s3/

答案3

我找到了一个避免 DNS CNAME 和 CloudFront 成本的替代解决方案:将其全部放在 NGINX 服务器内。这是一个很棒的解决方案,使用代理缓存进行了优化。解决方案如下:https://stackoverflow.com/questions/44639182/nginx-proxy-amazon-s3-resources/44749584 希望这对我有帮助!:)

相关内容