我有一个使用 S3、Cloudfront 和 Route53 的静态网站。我有版本 1,现在更新到版本 2。
一些额外的检查:
dig A xyz.cloudfront.net
和 dig A mydomain.com
指向相同的 IP。
curl 的输出描述了之前的情况(版本 1),其中 mydomain.com 配置为指向 www.example.com。现在我让它直接指向 cloudfront 发行版
curl -sD - https://example.com -o /dev/null
HTTP/1.1 302 Moved Temporarily
Content-Length: 0
Connection: keep-alive
Server: CloudFront
Location: https://www.example.com/
X-Cache: Miss from cloudfront
Via: 1.1 qwe.cloudfront.net (CloudFront)
...
curl -sD - https://xyz.cloudfront.net -o /dev/null
HTTP/2 200
content-type: text/html
content-length: 537
date: Fri, 18 Nov 2022 20:35:41 GMT
last-modified: Tue, 15 Nov 2022 10:09:03 GMT
etag: "..."
server: AmazonS3
x-cache: Miss from cloudfront
via: 1.1 bla.cloudfront.net (CloudFront)
...
还有什么我可以检查以找出配置错误的地方吗?
DNS 服务器 (Route53) 和这些 DNS 记录上的 TTL 在这里完全不相关。这些与内容缓存无关。
您的
curl
命令显示您的请求正在路由到不同的 CloudFront 边缘节点(qwe.cloudfront.net
和 bla.cloudfront.net
)。
这些节点之一似乎之前曾为您的网站提供过请求,因此它存储了一个缓存版本,当您现在发出命中该 CloudFront 边缘节点的新请求时,它仍在提供该版本。另一个节点没有存储缓存版本,因此当您的请求到达它时,它会返回到原点 (S3) 并拉取最新版本。
当您在源服务器上发布新内容而不通知 CDN 需要清除旧的缓存内容时,这几乎是 CloudFront 或任何其他 CDN 的预期行为。您需要 告诉 CloudFront 使缓存无效,这将导致它从所有边缘位置删除内容的缓存版本。
我也有同样的问题。这是因为另一个服务被用来部署网络。 AWS 放大。我解决了这个问题,删除了与 aws amplify 相关的所有内容。