我有由 Cloudflare 提供的静态内容。Cloudflare 指向 Amazon S3 来获取静态内容并通过 CNAME(cdn.mydomain.com)提供。存储桶设置正确,几个月来一切都运行良好,直到星期五我开始在浏览器中收到请求超时。我确认内容仍然可以通过 S3 访问,并向 Cloudflare 开具了一张票。Cloudflare 报告说“亚马逊似乎确实有某些东西阻止了来自我们 IP 的请求”,并且他们在日志中看到以下消息:
upstream timed out (110: Connection timed out) while reading response header from upstream cdn.mydomain.com
upstream prematurely closed connection while reading response header from upstream cdn.mydomain.com
以下是我的 CORS 文件中已有的内容。
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
我应该在 AllowedHeader 中输入 * 吗?我需要明确命名 Cloudflare IP 地址吗?我缺少什么来避免被阻止?
答案1
你不使用亚马逊有什么原因吗CloudFront由 S3 bucket 支持的分发来提供您的静态内容?应该比 CloudFlare -> S3 更有效,并且如果 Amazon 确实阻止 CloudFlare 访问 S3(虽然这不太合理,但他们这样做的原因),这对您来说就不再是问题了。
您还可以将 cdn.mydomain.com 主机名 CNAME 为 [distribution_id].cloudfront.net,以保留您的 URL 方案并使转换对用户透明。CloudFront 的运行方式与 CloudFlare 非常相似,它们的 IP 地址通过 BGP 路由到全球最近的位置,但亚马逊在内部拥有更高效的 CloudFront -> S3 获取系统。
据我记得,S3 和 CloudFront 之间的传输是免费的,因此您不需要为带宽支付太多费用(如果有的话)。