我看到的是一个空白页面(0字节文件),就好像没有设置“网站重定向位置”元数据值一样。 我错在哪了? 此外,这在AWS CloudFront上可行吗?
我的S3控制台设置如下:
![S3 Console Setup](https://istack.dev59.com/6JiN6.webp)
对于S3中类似网站功能的操作,例如重定向、HTML错误消息和索引文档,不能使用REST端点(${bucket_name}.s3.amazonaws.com
或 ${bucket_name}.s3.${region}.amazonaws.com
),因为这些功能仅由网站端点(${bucket_name}.s3-website.${region}.amazonaws.com
)提供。
http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html
要在Cloudfront中启用此行为,您需要配置Cloudfront使用此端点,而不是控制台自动完成提供的REST端点。
输入您的存储桶的Amazon S3静态网站托管端点。此值在Amazon S3控制台上出现,在 属性 页下的 静态网站托管 中。
当您以此格式指定存储桶名称时,可以使用Amazon S3重定向和自定义错误文档。
请注意,网站端点不支持HTTPS,但是您可以配置Cloudfront从桶中获取HTTP即使客户端连接是HTTPS。
提示:在使用CloudFront进行故障排除和测试时,用户经常会被制造变更和CloudFront开始表现新行为之间的明显“延迟”所困扰。对于错误页面,CloudFront具有默认的5分钟Error Caching Minimum TTL,防止它重新发送请求以获取失败的页面到源站点,这是一个与Cache Behavior中设置的最小/默认/最大TTL不同的计时器。特别是在测试时,您可能需要禁用这些计时器,并强制重试每个返回错误的页面的后续请求,使用我在回答有关Amazon CloudFront延迟问题的步骤。
我也遇到了重定向失败和下载零长度文件的问题,但我并没有使用 Cloudfront。
在我的情况下,根本原因是我的 DNS CNAME 记录指向了 REST 终端点 (static.righto.com.s3-us-west-2.amazonaws.com),而不是网站终端点 (static.righto.com.s3-website-us-west-2.amazonaws.com)。更新 CNAME 记录后解决了我的重定向问题。
这个问题的另一个症状是,缺少的页面显示了 XML 错误页面,而不是 HTML 错误页面。
这个文档解释了网站终端点和 REST 终端点之间的区别。
您可以使用s3cmd(当然要在bash脚本中)和它的参数:
--add-header
与 x-amz-website-redirect-location
例如,对于页面/about/
,此脚本解决了问题:
s3cmd \
--acl-public \
--add-header "x-amz-website-redirect-location: /about/" \
--no-preserve \
put "./path/to/any/small/file/at/your/local/drive/index.html" "s3://domain.com/about"
您可能希望使用Lambda@Edge来抽象重定向,并将Lambda部署到相应的CloudFront分发中。
S3不是完整的Web服务器,因此不支持本地重定向。