Amazon CloudFront
开发人员指南 (API 版本 2016-09-29)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

指定默认根对象

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

如何指定默认根对象

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

要为分配指定默认根对象

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

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

    注意

    如果默认根对象的文件名太长或包含无效的字符,CloudFront 返回错误 HTTP 400 Bad Request - InvalidDefaultRootObject。此外,CloudFront 缓存代码五分钟,然后将结果写入访问日志。

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

    有关 Amazon S3 权限的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的访问控制。有关使用 Amazon S3 控制台更新权限的信息,请转到 Amazon Simple Storage Service 控制台用户指南

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

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

    1. 登录 AWS 管理控制台,通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/

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

    3. Distribution Details 窗格中的 General 选项卡上,选择 Edit

    4. 在“Edit Distribution”对话框的“Default Root Object”字段中,输入默认根对象的文件名。

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

    5. 要保存您的更改,选择是,编辑

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

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

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

    2. 重复第 2 步和第 3 步,验证您授予了正确的权限以及您正确地更新了分配的配置,以指定默认根对象。

标头如何使用默认根对象

以下示例说明了默认根对象的工作方式。假定以下请求指向对象 image.jpg

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

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

http://d111111abcdef8.cloudfront.net/

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

http://d111111abcdef8.cloudfront.net/

返回:

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

但是,如果您定义默认根对象,最终用户对分配的子目录的请求不返回默认根对象。例如,假设 index.html 是您的默认根对象并且 CloudFront 收到最终用户针对 CloudFront 分配中的 install 目录的请求:

http://d111111abcdef8.cloudfront.net/install/

CloudFront 不会返回默认根对象,即使 index.html 副本位于 install 目录中。

如果您将自己的分配配置为允许 CloudFront 支持的所有 HTTP 方法,则默认根对象适用于所有方法。例如,如果您的默认根对象为 index.php 并且您编写应用程序以将 POST 请求提交到您的根域 (http://example.com),则 CloudFront 将请求发送到 http://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 提供私有内容

  • 错误 403 Forbidden — 如果与分配关联的 Amazon S3 存储桶的权限或该存储桶中的对象的权限拒绝 CloudFront 和每个人进行访问,CloudFront 将返回该错误。