是否可以在没有域命名的情况下为 GCS 存储桶设置索引文件?

Posted

技术标签:

【中文标题】是否可以在没有域命名的情况下为 GCS 存储桶设置索引文件?【英文标题】:Is it possible to set index file for GCS buckets without domain naming? 【发布时间】:2019-11-28 22:15:30 【问题描述】:

我们有一个特定的情况,我们希望通过 GCS 为静态网站提供服务(通过负载均衡器 w G CDN),我们强烈希望不对存储桶使用域命名。

我们不希望这样做的原因是域验证过程对用户非常不友好,并且我们的用户需要执行额外的步骤(我认为我们应该能够相当广泛地自动化这个过程,但这又是一吨额外的我试图规避的开发工作)。

我试过了

gsutil web set -m index.html gs://bucket-name

我将 mike.adhero.io 记录设置为负载均衡器的 IP。但它仍然显示 xml 样式丢失错误。 mike.adhero.io/index.html 按预期工作

有没有办法解决这个问题?

【问题讨论】:

【参考方案1】:

是否可以为没有域的 GCS 存储桶设置索引文件 命名?

没有。原因是这会破坏正常存储桶访问(API 请求)的 API 行为。

MainPageSuffixNotFoundPage 网站配置仅用于通过 CNAME 端点或 Cloud Load Balancing 到达 Cloud Storage 的请求。例如,对 www.example.com 的请求会显示索引页面,但对 storage.googleapis.com/www.example.com 的等效请求不会。

因此,对 Cloud Storage 域(例如 storage.googleapis.com/www.example.com)的请求的 API 行为会被保留。例如,您可以继续列出 www.example.com 存储桶中的对象,就像列出任何其他存储桶一样。对于 www.example.com 存储桶,您收到的对象列表包括 404.html 和 index.html。

这在以下 Google 文档中有记录:

Static Website API Behaviour

【讨论】:

“MainPageSuffix 和 NotFoundPage 网站配置仅用于通过 CNAME 端点或 Cloud Load Balancing 到达 Cloud Storage 的请求。” >>“我将 mike.adhero.io 设置为负载平衡器的 IP 记录”我正在使用负载平衡.. 我了解 storage.googleapis.com/www.example.com 不起作用并了解这一点,我希望它可以通过负载均衡器工作,但似乎不能(至少没有名为 bucket 的域) 我不确定你想说什么。 Google 负载均衡器不会在 Cloud Storage 前实现网站配置。这由 Cloud Storage 管理。 您说“通过 CNAME 端点或云负载平衡。”。所以我知道如果流量通过负载均衡器或 CNAME 路由,GCS 会理解它必须充当“网站服务”。但我现在理解的是,它仍然依赖于作为域的存储桶名称。所以实际上除了将存储桶命名为域并编写代码来自动化验证过程之外,我们没有其他选择。谢谢。【参考方案2】:

不,这是不可能的,正如约翰·汉利所说。当您配置一个没有域名命名的存储桶时,这可以被认为是云上的存储空间,您需要指定路径。您可以将其视为硬盘驱动器和文件夹,这就是为什么只有在您指定文件“mike.adhero.io/index.html”的路径和名称时才能正常工作。使用域名配置存储桶后,API 会识别您要使用“网站服务”而不是“存储桶服务”。 据我了解,您正在尝试使用具有存储桶服务配置的网站服务,根据设计和目标,这是不可能/可行的。如果我错了,请纠正我。 同样正如 John 所提到的,此选项需要在 Cloud Storage 中配置(当您指定域名时),因为负载均衡器仅用作配置的后端服务的访问点和负载分配。 关于域验证过程 [0],是的,最初可能会有点困难,一旦您完成了一次或两次该过程,就真的很容易了。我将与您分享几个视频,第一个是关于 Web 搜索控制台 [1],第二个是关于将 TXT 记录添加到 CLOUD DNS [2],考虑到您的注册商可能是 Google Cloud DNS。你可以注意到流程是一样的,你只需要考虑每个注册商的流程差异。 希望这些信息有帮助 祝你有美好的一天! [0] https://cloud.google.com/storage/docs/domain-name-verification [1]https://www.youtube.com/watch?v=VRCmKkzeeMI [2]https://www.youtube.com/watch?v=ixIHDdHeInU

【讨论】:

以上是关于是否可以在没有域命名的情况下为 GCS 存储桶设置索引文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 GCS 存储桶的限制

配置GCS存储桶以允许公共写入但不允许覆盖

检查 Google BigQuery 是不是使用 GCS 存储桶或任何其他存储

通过重命名在GCS下移动文件

如何使用 terraform 配置 GCS 存储桶权限?

使用相同的 GCP 负载均衡器在 GCS 存储桶和 GKE 之间进行路由