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

指定默认根对象

当用户(查看器)请求您的分配的根 URL 而不是请求分配中的对象时,您可配置 CloudFront 以返回特定的对象(默认根对象)。您可以使用默认根对象来避免公开分配的内容。

如何指定默认根对象

要避免公开分配的内容或返回错误,请为您的分配指定默认根对象。您可以指定确切的文件名或该文件的路径。例如,如果您的根对象是 index.html 文件,则可以指定该文件的名称。如果您的 index.html 文件位于其他文件夹中,请改为指定路径,例如 exampleFolderName/index.html。如果您设置了指向默认根对象的路径,则查看器对分配的根 URL 发出的请求将返回该路径中的指定文件。使用文件路径,您可以在源位置更灵活地组织内容,因为您的默认根对象可能在文件夹中而不是根级别。

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

    文件可为 CloudFront 支持的任何类型。有关文件名的约束条件列表,请参阅《Amazon CloudFront API Reference》DistributionConfigDefaultRootObject 元素。

    注意

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

  2. 确认对象的权限至少向 CloudFront 授予了读取访问权限。

    有关 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.htmlexampleFolderName/index.html。指定 /exampleFolderName/index.html/index.html 可能会导致 403 访问被拒绝错误

    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 目录中。但是,如果您指定了默认根对象的路径install/index.html),则对于最终用户针对 install 目录发送的请求,CloudFront 将返回默认根对象。

如果您将自己的分配配置为允许 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 则返回该错误。