昨天,我设置了证书和 CloudFront,以便将我的网站从 http 迁移到 https。 http 自动重定向到 https。 CloudFront 发行版指向 S3 存储桶。一切正常;但有些文件陷入重定向循环。我以为是CF有点慢,所以我把它留了一夜。 12小时后...同样的问题。
示例:
https://www. humantruth.info/1.jpg -> 重定向循环。(20次重定向,然后浏览器放弃)
https://www. humantruth.info/bus_seats.jpg -> 负载正常。
在 S3 存储桶中,它们都具有“标准”存储类别(无论这意味着什么),并且没有迹象表明其中一个存储桶中有任何特殊设置,而另一个则没有。
我在工作和家里的不同设备上尝试了不同的浏览器,并得到了相同的结果。我每隔几年才更改一次AWS设置,并且设置非常简单,并且从未尝试在单个图像上应用特定的转发或设置;我确信两者的设置是相同的。
(Q1) 我应该做哪些/种类/事情来进行故障查找? 我遵循了 AWS 指南中的“如何启用 https”,并将所有设置保留为默认值(如指南中所述),除了一些基本设置那些(例如在发行版上设置起源)。
(问题2)是否是缓存问题? 当我更新S3存储桶项目时,实时站点上的内容没有更新,甚至3小时后也是如此。通常情况下,它会在一分钟内更新。所以我需要告诉CF更频繁地更新。也许这也是重定向问题的一个模糊原因。
CloudFront distribution > Edit Behaviour > Cache key and origin requests
默认:
Cache policy and origin request policy (recommended)
致:
Legacy cache settings > None (for Headers, Query Strings and Cookies).
我根本不使用cookies,我不做任何类型的特殊请求;整个网站是静态.html页面,静态.js,静态.css和静态图像内容。
(Q3)发生了什么事?我有一个非常非常简单的设置,像这样的复杂性让我觉得我应该放弃 https 的整个概念,只保留 http。 CF 是否存在根本性错误和/或设置指南中缺失?
修好了。解决办法:
After setting up CloudFront, do an Invalidate on /* files.
Amazon S3 存储桶必须已默认在后台使用 CloudFront。当我创建自己的 CloudFront 发行版时,某些文件在仅存在于 http 中时就已被预先缓存。因此,当我实现 http > https 转发时,无论如何,一些文件仍然被 CloudFronts 重定向——旧的 http 版本的预缓存是错误的。
因此,无论我做什么,它们都永远不会起作用(特别是对于一些文件),并且我的设置是什么并不重要。在 CloudFront 中,解决方案是使用“所有”模式 /* 强制所有文件“失效”。
非常烦人的是,从一开始在执行任何操作之前,默认行为是任何已缓存的文件都会进行重定向循环。
AWS 确实应该将 S3 站点从 http 转换为 https 的设置指南中包含这一额外步骤,以防止此错误。