您是否在使用火山引擎对象存储(TOS)和内容分发网络(CDN)托管静态网站时遇到了以下问题:当访问加速域名根目录(例如 https://www.example.com/)时,看到的不是预期的 index.html 首页,而是一个 XML 格式的文件列表?
本文将为您介绍解决此问题的最佳实践。
当 CDN 收到访问根目录(/)的请求时,它会向源站 TOS 请求根目录。TOS 默认会返回一个包含所有文件列表的 XML 文件,而不是您期望的首页文件(如 index.html)。
要解决这个问题,需要根据您 TOS 存储桶的访问权限,采取不同的配置思路。主要分为以下两种场景。
如果您的存储桶访问权限是公开的,您有两种方式来配置首页访问:
如果您的存储桶是私有的,情况会更复杂一些。根据 TOS 关于 设置静态网站 的前提条件,首页文件必须是公开的。私有桶的文件默认私有,因此直接使用 TOS 的静态网站特性是行不通的。
针对私有桶,您同样有两种方法:
index.html)的权限设为“公共读”。这种方式虽然可行,但可能与您期望的严格安全策略相悖。详细操作请参见文末的 附录:其他配置方式。综合以上两种场景,我们不难发现,使用 CDN 的“回源 URL 改写” 特性是解决首页访问问题的最佳实践。
因此,本文将重点介绍如何使用“回源 URL 改写”特性来配置您的静态网站首页。
“回源 URL 改写”特性的核心原理是:在 CDN 的边缘节点上拦截用户访问根目录的请求,并在请求回源到 TOS 之前,将请求的 URL 路径修改为您的首页文件路径(例如 /index.html)。
您只需在火山引擎内容分发网络控制台,按照以下步骤完成配置即可。
^/$/index.html。本文介绍的“回源 URL 改写”是解决首页访问问题的最佳实践。在正确配置后,您的网站已经可以正常运行。
本章节介绍的是一个可选的、用于安全加固的“兜底”策略。其目标是:在 CDN 配置因某些原因(例如被误删除)失效时,防止 TOS 存储桶的文件列表被直接暴露。它通过在 TOS 侧禁用 ListBucket 权限来实现。
注意
当一个请求试图列出存储桶中的文件时(例如,直接访问 TOS 桶的根目录),TOS 会检查该请求是否拥有 ListBucket 权限。
我们的“回源 URL 改写”规则,巧妙地将访问根目录的请求改写为了访问 /index.html,因此它不会触发 ListBucket 检查,网站得以正常访问。
而本章节介绍的“兜底”策略,就是主动将 ListBucket 权限关闭。这样,即使 CDN 规则失效,当有请求直接访问到 TOS 桶的根目录时,也只会收到一个 403 错误,而不是文件列表,从而保证了安全性。
根据您的存储桶访问权限,执行对应的检查和配置。
对于私有桶,默认情况下,匿名用户没有任何权限,包括 ListBucket 权限。因此,您通常无需进行任何额外配置,安全兜底策略天然生效。
对于公开桶,您需要检查并确保 ListBucket 权限没有被错误地开放给匿名用户。您可以通过以下两种方式进行配置(任选其一即可):
在 TOS 控制台,导航到 桶配置 > 访问控制 > 公共访问权限,在 读取权限 中,确保“包含对象列举/多段列举”选项没有被勾选。
如果您正在使用授权策略来管理权限,请确保策略中没有授予匿名用户 ListBucket 的权限。例如,在可视化配置中,确保 ListBucket 未被勾选。