我上传了图片到谷歌存储桶,我没有尝试设置使用负载均衡器的CDN工作。
存储状态:存储桶权限:存储对象查看器-读取器分配给allUsers,存储传统存储桶读取器分配给allUsers
文件状态:设置了共享公共,并且有公共链接
负载均衡器:在主机名上设置为path /creative/*
但我总是收到这样的消息:
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
</Error>我注意到的是,一旦我构建了/creatives/*的路径,就有另一个路径build /*直接指向自动伸缩组的后端服务
我是否遗漏了任何设置?
发布于 2017-11-12 21:55:56
因此,我发现Google CDN + Google http负载均衡器的工作方式与其他CDN不同。
使用常规的CDN,您可以将源指向您的存储桶HTTP地址,并处理/结构。例如: Google CDN Bucket URL: googleapi.storage.com/my-bucket文件夹结构: /1/1.jpg
正常的CDN源将指向googleapi.storage.com/my-bucket,您将获得CDN的新服务端点,如:my-bucket.fast ly.cdonservice.com,此调用将起作用:my-bucket.fast ly.cdonservice.com/1/1.jpg
但在google cloud上,您设置的是一条连接到您在后端部分创建的CDN服务的路径。这就是最大的区别,让我们假设你创建了这个路径规则。host:镜像路径:/ www.googlecdnnonexplainedfeautres.com /* service: yourbackendservice (连接到您想要缓存的bucket )
因此,您可能会认为这应该是可行的: www.googlecdnnonexplainedfeautres.com/images/1/1.jpg.
但是不..。挖掘日志后,您将在存储桶上找到404,因为google将在存储桶上搜索以下路径:
googleapi.storage.com/my-bucket/images/1/1.jpg.
等等,图像是从哪里来的?我以为这是个钩子。不,谷歌认为这是一个静态的网站根(你可以在S3上打开和关闭的东西),所以这里是强制性的。
那么,这应该如何工作呢?
修改文件夹结构,如下所示:
Google CDN Bucket URL: googleapi.storage.com/my-bucket
文件夹结构: images/1/1.jpg
现在你很棒了。
此链接现在应该起作用了:
www.googlecdnnonexplainedfeautres.com/images/1/1.jpg.
因此,在提交一个存储桶作为google的CDN源之前,只需添加另一个与您在LB上设置的路径相匹配的顶级文件夹。
当然还有..permissions、allUsers、read等。
EnjoY!
发布于 2021-04-28 00:52:59
您可以使用URL重写来解决此问题。
这在2017年可能还不存在,但至少在2021年是有选择的。
解释:
lb的默认行为是将host之后的整个路径传递到云存储。这看起来可能不正确,但这是一个合理的默认值(负载均衡器如何知道您想要包括或排除路径的哪一部分?)。
我也面临着同样的问题。
我将mydomain.com/static/*连接到我的云存储桶static-assets。
在访问mydomain.com/static/static-asset.jpg时,负载均衡器会为具有key static-assets/**static**/static-asset.jpg的对象请求云存储。
因为对象的实际键是static-assets/static-asset.jpg,所以这将返回一个NoSuchKey响应。
修复方法是将/static的路径前缀重写为/。
配置的一种方式是通过负载均衡器UI--我们可以添加一个高级路径规则来重写前缀。

请注意:
重要提示:重写将按原样添加到路径前面。不支持完整路径重写。HTTP(S)负载均衡仅实现路径前缀重写。例如,您可以重写:
host.name/path1/resource1tohost.name/path2/resource1。您不能将host.name/path1/resource1重写为host.name/path1/resource2。
阅读有关URL重写here的内容。
https://stackoverflow.com/questions/47113408
复制相似问题