我将图片上传到谷歌存储桶,我不想尝试使用负载均衡器设置CDN。
存储状态: 存储桶权限:存储对象查看器 - 读取器分配给所有用户, 存储传统存储桶读取器分配给所有用户
档案状态: 共享公共设置,并有一个公共链接
负载均衡器: 设置为主机名上的路径/广告素材/ *
但我总是得到这个消息:
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
</Error>
我注意到的是,只要我构建/ creatives / *的路径,就会有另一个路径构建/ *直接指向自动缩放组的后端服务
我在这里缺少任何设置吗?
答案 0 :(得分:1)
因为我发现Google CDN + Google http负载均衡器与其他CDN不同。
使用常规CDN,您可以将源指向您的存储桶HTTP地址并在/结构上工作。 例如 : Google CDN Bucket网址: googleapi.storage.com/my-bucket 文件夹结构: /1/1.jpg
正常的CDN来源将指向googleapi.storage.com/my-bucket 您将获得CDN的新服务端点,如: my-bucket.fastly.cdonservice.com 这个电话会起作用: my-bucket.fastly.cdonservice.com/1/1.jpg
但是在谷歌云上你正在设置的是一条连接到你在后端部分创建的CDN服务的路径。 所以这是最大的区别,让我们假设你创建了这个路径规则。 主持人:www.googlecdnnonexplainedfeautres.com 路径:/ images / * service:yourbackendservice(连接到要缓存的存储桶)
所以你可能认为这应该有效: www.googlecdnnonexplainedfeautres.com/images/1/1.jpg。
但没有...... 在挖掘日志后,您会发现存储桶中有404,因为谷歌会在存储桶中搜索此路径:
googleapi.storage.com/my-bucket/images/1/1.jpg。
等等,图片来自哪里?我认为它是一个钩子。没有谷歌把它作为一个静态的网站根(你可以在S3上检查和关闭的东西)所以这里强制性。那么这应该如何运作?
将文件夹结构修改为:
Google CDN Bucket URL: googleapi.storage.com/my-bucket
文件夹结构: 图像/ 1 / 1.JPG
现在你很好。
此链接现在可以使用:
www.googlecdnnonexplainedfeautres.com/images/1/1.jpg。
因此,在您提交一个用作谷歌CDN源的存储桶之前,只需添加另一个与您在LB上设置的路径匹配的顶级文件夹。
当然还有..权限,所有用户,阅读等等。
享受!
答案 1 :(得分:1)
这在 2017 年可能不存在,但至少在 2021 年有一个选项。
说明:
lb 的默认行为是将主机之后的整个路径传递到 Cloud Storage。这可能看起来不正确,但这是一个合理的默认设置(负载均衡器如何知道您要包含或排除路径的哪一部分?)。
我遇到了同样的问题。
我已将 mydomain.com/static/*
连接到我的云存储桶 static-assets
。
在访问 mydomain.com/static/static-asset.jpg
时,负载均衡器会为密钥为 static-assets/**static**/static-asset.jpg
的对象请求云存储。
由于对象的实际键是 static-assets/static-asset.jpg
,这将返回 NoSuchKey
响应。
修复方法是将 /static
的路径前缀重写为 /
。
一种配置方法是通过 Cloud Console 负载均衡器界面——我们可以添加高级路径规则来重写前缀。
请注意:
<块引用>重要提示:重写按原样添加到路径中。完整路径
不支持重写。 HTTP(S) 负载平衡仅实现
路径前缀重写。例如,您可以重写:
host.name/path1/resource1
到 host.name/path2/resource1
。你不能
将 host.name/path1/resource1
重写为 host.name/path1/resource2
。
了解 URL 重写 here。