【发布时间】:2022-08-19 08:28:10
【问题描述】:
我正在尝试将 Cloud CDN 添加到我的 Firebase 存储桶中,但我遇到了由具有 cache-control 的桶提供的图像的问题。
我有以下非常广泛的 firebase 规则:
rules_version = \'2\';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read: if true;
}
}
}
我希望这将允许我的 firebase 存储桶中的所有对象都可见。我的存储桶位于gs://lookieloo-app.appspot.com。我有一个位于/user-videos/test1.png 的文件。
我已经设置了一个 Cloud CDN 以指向此存储桶,其中包含以下详细信息:
请注意,CDN 设置为缓存静态内容。
我的负载均衡器似乎运行良好:
我的负载均衡器具有以下 IP 地址:
我希望访问http://35.190.28.68/user-videos/test1.png 会导致图像被正确加载,但我看到访问被拒绝:
但是,我发现如果我手动编辑 Google Cloud Storage 中的文件权限以获得公共访问权限
然后图像按预期从负载均衡器加载(注意 URL 与之前的屏幕截图相同):
有趣的是,如果我从https://firebasestorage.googleapis.com/v0/b/lookieloo-app.appspot.com/o/user-videos%2Ftest1.png 的firebase URL 加载文件并检查网络响应,我会看到cache-control 标头的值为private
如何使用 Firebase 存储规则使指定文件夹中的内容可公开访问,以便 Cloud CDN 提供这些内容?
-
负载平衡和 Cloud CDN 似乎设置正确。您是否希望 GCP CDN 缓存通过 Firebase URL/下载 URL 访问的内容。我不相信这是可能的,因为这不是缓存的行为。请查看有关Cacheable content 的文档。
-
不,我希望 Cloud CDN 缓存通过负载均衡器 IP 地址访问的内容,例如 35.190.28.68/user-videos/test1.png,但如果不将该对象标记为可公开访问,这似乎是不可能的。
-
启用Cloud CDN 用于提供更接近用户的内容以加速您的网站和应用程序,但它不会绕过 Google Cloud Storage 中的权限。你需要先Make all objects in a bucket publicly readable。
-
是的,所以我在上面展示的具有广泛读取权限的 firebase 规则是不够的 - 从存储桶的角度来看,该对象也必须是“公共的”。那是对的吗?
-
那是对的。
标签: firebase google-cloud-storage google-cloud-cdn