angular - 如何修复 AccessDenied 错误 CloudFront Angular 部署的应用程序?
问题描述
我正在设置一个部署在 S3 上并由 CloudFront 分发处理的 Angular 应用程序。当我访问该应用程序时,它可以正常工作,但是如果我重新加载页面,则会出现以下错误:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>E716BA4DFD8C1B54</RequestId>
<HostId>
0EcNthjt/zlsAZxEx8JncShstTBNxFram3F6Jy2uI0LD+am1l+7YxGAbZ1dVphkuhZj32mnkjug=
</HostId>
</Error>
我已经按照本教程设置了包含所有必需字段的 CloudFront 分发:
我已将 index.html 作为默认根对象放置,并将其放置在 S3 存储桶的索引文档选项下。
通过该设置,当您重新加载页面时,它应该可以工作并使用 angular 的 index.html,但是我收到了 AccessDenied 错误。
解决方案
好的,我刚刚从同一篇文章中发现了这个问题:
注意到这一点非常重要:
重要提示:Origin Domain Name 将为您提供 S3 存储桶的下拉列表。你不应该使用它。因为它省略了 S3 的区域,它将导致请求重定向,而不是通过 CloudFront 传递流量。(可能有更好的配置方法,我不确定。)所以只需在此处复制并粘贴您的 S3 URL。.s3-.amazonaws.com 。
确保使用以下 URL 结构将存储桶放置为原始域名:
<bucket-name>.s3-website-<bucket-region>.amazonaws.com
不要使用建议的存储桶 URL 结构,因为它不起作用。希望这对未来有所帮助。
推荐阅读
- node.js - 如何从 Scival Api 检索作者指标?
- python - 程序立即跳转到我的代码中的 else 子句
- python - 使用python在双引号文件夹中提取rar文件
- sql - 使用 ST_ClosestPoint、ST_StartPoint 和 ST_EndPoint 查找距离线起点和终点最近的对象
- firebase - 从 Firebase 实时数据库中的列表中获取一些(而不是全部)属性
- ios - IOS14 didWriteValueFor features.value 总是返回 null。(iOS 12 正常)
- python - Django - 从 DB 获取 URL 并将其用作 iframe 中的 src
- kubernetes - Prometheus 无法抓取 Kubernetes 指标
- typescript - 如何缩小范围
在打字稿中 - javascript - 带有 html2canvas 的 JSPDF 自定义字体