指定默认根对象 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

指定默认根对象

当用户请求分配的根 URL 而不是请求分配中的对象时,您可配置 CloudFront 以返回特定的对象(默认根对象)。通过指定一个默认根对象,您可以避免公开分配的内容。

如何指定默认根对象

要避免公开分配的内容或返回错误,请通过以下步骤来为您的分配指定默认根对象。

要为分配指定默认根对象
  1. 将默认根对象上传到分配指向的源。

    文件可为 CloudFront 支持的任何类型。对于文件名的约束列表,请参阅 DefaultRootObjectDistributionConfig 中的元素说明。

    注意

    如果默认根对象的文件名太长或包含无效字符,CloudFront 则返回错误 HTTP 400 Bad Request - InvalidDefaultRootObject。此外,CloudFront 将缓存代码 10 秒钟(默认情况下),并将结果写入访问日志。

  2. 确认对象的权限至少授予 CloudFront read 访问权。

    有关 Amazon S3 权限的更多信息,请参阅 Amazon Simple Storage Service 用户指南中的 Amazon S3 中的标识和访问权限管理

  3. 更新分配,以使用 CloudFront 控制台或 CloudFront API 关连默认根对象。

    要使用 CloudFront 控制台指定默认根对象:

    1. 登录 Amazon Web Services Management Console,并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/v4/home

    2. 在顶部窗格中的分配列表里,选择要更新的分配。

    3. 设置窗格中的常规选项卡上,选择编辑

    4. 编辑设置对话框的默认根对象字段中,输入默认根对象的文件名。

      仅输入对象名称,例如 index.html。不要在对象名称前添加 /

    5. 选择 Save changes(保存更改)

    要使用 CloudFront API 更新您的分配,请在您的分配中指定 DefaultRootObject 元素的值。有关使用 CloudFront API 指定默认根对象的信息,请参阅 Amazon CloudFront API 参考中的 UpdateDistribution

  4. 确认您已经通过请求根 URL 启用了默认根对象。如果您的浏览器不显示默认根对象,请执行以下步骤:

    1. 通过在 CloudFront 控制台查看分配的状态,确认您的分配已经完全部署。

    2. 重复第 2 步和第 3 步,确认您已授予正确的权限,并且您已正确地更新分配的配置来指定默认根对象。

原定设置根对象的工作原理

假定以下请求指向对象 image.jpg

https://d111111abcdef8.cloudfront.net/image.jpg

相反,以下请求指向相同分配的根 URL 而不是特定的对象,如第一个示例中所述:

https://d111111abcdef8.cloudfront.net/

当您定义默认根对象时,调用分配的根的最终用户请求返回默认根对象。例如,如果您指定文件 index.html 作为您的默认根对象,请求:

https://d111111abcdef8.cloudfront.net/

返回值:

https://d111111abcdef8.cloudfront.net/index.html

注意

CloudFront 不确定带有多个尾部斜杠的 URL(https://d111111abcdef8.cloudfront.net///)是否等同于 https://d111111abcdef8.cloudfront.net/。您的原始服务器进行该比较。

如果您定义原定设置根对象,最终用户对于分配的子目录的请求不返回该原定设置根对象。例如,假设 index.html 是您的默认根对象且 CloudFront 接收最终用户对 CloudFront 分配下的 install 目录的请求:

https://d111111abcdef8.cloudfront.net/install/

CloudFront 不会返回默认根对象,即使 index.html 的副本出现在 install 目录中。

如果您将自己的分配配置为允许 CloudFront 支持的所有 HTTP 方法,则默认根对象适用于所有方法。例如,如果您的默认根对象为 index.php 并且您编写应用程序以将 POST 请求提交到您的根域 (https://example.com),则 CloudFront 会将请求发送到 https://example.com/index.php。

CloudFront 默认根对象的行为与 Amazon S3 索引文档的行为不同。当您配置 Amazon S3 存储桶作为网站并指定索引文档时,Amazon S3 将返回索引文档,即使用户请求存储桶中的子目录。(索引文档副本必须出现在每个子目录中。) 有关配置 Amazon S3 存储桶作为网站以及索引文档的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的在 Amazon S3 上托管网站章节。

重要

请记住,默认根对象仅适用于 CloudFront 分配。您仍需要管理源的安全。例如,如果您使用 Amazon S3 源,仍需要适当地设置您的 Amazon S3 存储桶 ACL,以确保您想要的存储桶访问级别。

未定义根对象的情况下 CloudFront 的工作方式

如果您不定义默认根对象,对分配的根请求则传递到源服务器。如果您使用 Amazon S3 源,则可能返回以下任何内容:

  • Amazon S3 存储桶的内容列表 – 在以下任何条件下,使用 CloudFront 访问分配的任何人均可看见源的内容:

    • 您的存储桶未正确配置。

    • 与分配有关的存储桶和存储桶中对象的 Amazon S3 权限授予每个人访问权。

    • 最终用户使用源的根 URL 访问您的源。

  • 源的私有内容列表 – 如果您配置您的源作为私有分配(仅您和 CloudFront 有访问权),具有凭证通过 CloudFront 访问您的分配的任何人可看见与您的分配有关的 Amazon S3 存储桶的内容。在这种情况下,用户不能通过源的根 URL 访问您的内容。更多有关分配私有内容的信息,请参阅 使用签名 URL 和签名 Cookie 提供私有内容

  • Error 403 Forbidden – 如果与分配有关的 Amazon S3 存储桶上的权限或该存储桶中对象上的权限拒绝 CloudFront 和每个人访问,CloudFront 则返回该错误。