问题标签 [google-cloud-cdn]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
google-cloud-platform - 使用 URLPrefix 的 Google Cloud CDN 签名 URL
我无法获得与 Google Cload CDN 的 URLPrefix 一起使用的签名 URL。
我已经设置了一个存储桶,它是我的 Cloud CDN 实例的后端存储桶。我已成功设置 URL 签名密钥并为特定路径生成了有效的签名 URL,所有这些都使用https://cloud.google.com/cdn/docs/using-signed-urls?hl=en_US中的说明
使用下面的 signCdnUrl2 函数,我可以为特定资源生成有效的签名 url,例如
https://example.com/foo.mp4?Expires=[EXPIRATION]&KeyName=[KEY_NAME]&Signature=[SIGNATURE]
我想避免“需要为每个不同的 URL 创建一个新签名”,所以我按照https://cloud.google.com/cdn/docs/using-signed-urls?hl=en_US#url-上的说明进行操作前缀以添加 URL 前缀选项。
我无法成功生成带有前缀的有效签名 url。我目前的尝试如下
如果我尝试访问给定前缀下的任何资源(在存储桶的根目录下),我会从云 cdn 收到 403 响应
来自负载均衡器的日志条目显示它正在将其检测为无效签名
说明中有什么我解释错了,还是我在执行过程中遗漏了一些东西?任何指导将不胜感激。
添加了 Base64Util 代码以确保完整性
更新
使用@elithrar https://stackoverflow.com/a/61315372/4330441提供的实现,我将signedParams 中的样本值换成了我自己的实时值。
结果是这样的:
URLPrefix=aHR0cHM6Ly9zcHluYWwucmNmc29mdHdhcmUuaW8vc2FtcGxlLzM2MHAv&Expires=1588291200&KeyName=my-key-name&Signature=wrbOloT+m31ZnQZei2Csqq0XaGY=
然后,当我附加这些查询参数以在此地址调用云 CDN 端点时:
我在 cdn 日志中得到相同的 403 响应和匹配的无效签名
尝试使用两个不同的签名密钥,它们可以很好地签名没有 url 前缀的单个特定 url。
google-cloud-platform - Google Cloud CDN 签名的 cookie 以存储桶为后端
作为带有 url 前缀的签名 url的替代方法,我正在尝试让签名的 cookie工作。Google Cloud CDN 设置了一个后端存储桶,该存储桶已配置并适用于标准签名 URL。
使用这些Go 示例,我在 nodejs(typescript) 中实现了一个 cookie 签名功能,当提供测试样本数据时,它会产生预期的结果。
然后,当我使用相同的函数为我的实际 cdn 实例生成签名 cookie 值时,我得到以下信息(键名和 url 前缀不是实际的):
URLPrefix=aHR0cHM6L---HdhcmUuaW8v:Expires=1587585646437:KeyName=my-key-name:Signature=2mJbbtYVclycXBGIpKzsJWuLXEA=
使用 firefox 开发工具创建烹饪我在附加 cookie 和未附加 cookie 时得到以下两个结果:
似乎 cookie“Cloud-CDN-Cookie”只是通过 Cloud CDN 传递并直接传递到后端存储桶,在那里它被忽略并给出了标准响应访问拒绝响应。
云平台日志显示没有cdn干预。
在签名实施或创建和使用 cookie 中我做错了什么吗?
firebase - 如何使用 Firebase 存储实现 CDN?
我目前正在开发一款适用于 Android 移动设备的社交媒体应用程序,我对我的应用程序的成本效率有疑问,尤其是使用 Firebase 存储。因此,我想为 Firebase 实现一个 CDN,它将缓存视频和图像,最好使用提供可扩展定价的 CDN 服务(Google CDN 提供这种价格模型)。我一直在到处搜索如何使用 Firebase Storage 实现 google CDN,但没有找到明确的说明。我怎样才能做到这一点?
django - 谷歌云存储与谷歌云 CDN
我有几个视频内容,通过我的 Django Google App Engine 应用程序通过我的 Google Cloud Storage 共享,这些视频内容带有与到期时间相关的签名 url 机制。
尽管已在 [此处][1] 中解释了 GCS 和 Google Cloud CDN 的可能使用关系,但这是否适用于通过 Google Cloud Storage 流式传输视频内容(MP4 或带有 MP4 的 MPEG-DASH),因为它被提到具有隐式 CDN 本身。
如果使用 Google CDN 是广播在线视频内容的一种更明智的方式,那么实现这一目标的最佳策略是什么,我如何在当前的 Google Cloud Storage 实施之上使用 Google Cloud CDN?
google-cloud-platform - 仅限 Google Cloud CDN 缓存媒体文件夹
我正在使用一个 magento 应用程序,我只需要缓存图像存储在 Google Cloud CDN 上的“/媒体”路径。
实际上,我已经配置了一个实例组,我的 VM 在其中运行整个网站应用程序,并通过后端部分的复选框启用了 Google Cloud CDN。
似乎每个 http 请求都发送到 Google Cloud CDN。
如何只缓存媒体路径文件?
cdn - Google Fonts /icon 和 /css CDN 链接之间的区别?
这是关于
https://fonts.googleapis.com/icon
https://fonts.googleapis.com/css
我在使用 Google Fonts 的 Google Material Icons CDN 时注意到这一点的用法。一些来源列出了 fonts.googleapis.com/ css ?family=Material+Icons而其他来源列出了 fonts.googleapis.com/ icon ?family=Material+Icons。两者的工作方式似乎完全相同。我只是想知道是否有人知道任何技术差异?
奇怪的是,我也能做fonts.googleapis.com/icon ?family= Roboto |Noto+Sans之类的事情,我只是好奇。谢谢!
google-cloud-platform - Google 存储桶(google api 链接)与 Cloud CDN 集成
尊敬的前辈!
我在 GCE 上托管了一个网站,并将所有静态内容存储在 GCS 存储桶上。然后使用 google API 链接访问内容,例如https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME] ..。
现在 API 链接作为https://www.example.com/post/[random post number] 嵌入在我网站的网页上(这是一个 html 链接,我每次都需要提供更新的副本,所以我设置了一个cookie 以避免在 CDN 中缓存)
我在负载均衡器后端 GCE 上启用了 Cloud CDN。我的理解是,网页中嵌入的静态内容链接会自动缓存在 CDN 中,因为存储桶访问是公开的。
在使用 cURL 进行验证后,我知道每当我使用 API 链接 ( https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME] ) 访问对象时,内容都会缓存在 CDN 中,并且每当我使用我的站点链接时(https://www.example.com/post/ [随机帖子号]),内容不被缓存。
请建议任何方法来缓存 clod CDN 中存储桶上的内容,其链接嵌入在动态内容 url 中,每次都必须重新获取。
提前致谢
cookies - 谷歌云 CDN 变化:cookie 响应永远不会被缓存命中
我正在使用 Google Cloud CDN 缓存 HTML 页面。
我已经根据文档配置了所有正确的标题,并且页面缓存很好。现在,我想更改它,使其仅在请求没有 cookie 时缓存,即没有cookie
设置标头。
我的理解是,这只是更改我的源服务器以向页面的所有vary: cookie
响应添加标头,然后仅添加缓存标头并且在请求上没有设置标头的情况。Cache-Control: public
Cache-Control: max-age=300
cookie
但是,这不起作用。使用curl
我可以看到,vary: cookie
当我发送带有和不带有 cookie 的请求时,所有缓存标头(标头)都按预期设置,但我从来没有在没有 cookie 的请求上获得缓存命中。
深入研究 Cloud CDN 日志,我看到每个没有cookie
标头的请求都cacheFillBytes
填充了与响应大小相同的数字 - 而不是针对cookie
标头设置了值的请求(如预期的那样)。
因此,看起来 Cloud CDN 正在尝试按预期填充没有 cookie 的请求的缓存,只是我从来没有收到缓存命中- 即cacheFillBytes
每次都cacheHit: true
没有出现在日志中。
有没有人遇到过类似的事情?我已经三重检查了我所有的标头是否有错别字,实际上只是删除vary: cookie
标头就可以使缓存按预期工作,所以我几乎可以肯定我的配置在标头和 Cloud CDN 认为可缓存的内容方面是正确的。
Cloud CDN 是否应该vary: cookie
像我期望的那样处理?文档建议它处理任意变化的标头。如果是这样,为什么我会cacheFillBytes
在每个请求上看到Cache-Control: public
并Cache-Control: max-age=300
设置响应,但cacheHit: true
在任何后续请求中都curl
看不到 a正在填充几个不同的边缘缓存)?
google-cloud-logging - Google Cloud CDN 未记录无服务器 Negs
我将 Google Cloud CDN 与我的 HTTPS 负载均衡器一起使用,并将 Cloud Run 作为我的后端服务。一切正常,并且从 CDN 提供资产。我可以通过 cUrl 命令验证缓存命中,并看到“Age”标头随着时间的推移而增加。
但是 - 这些命中(谷歌云 CDN)没有产生任何日志。
如果我在 CDN 上查看我的 URL 映射的监控选项卡,我会在图表所在的部分收到以下消息:
我的 CDN 已经运行了整整一周。
当我关注这篇文章时:https ://cloud.google.com/cdn/docs/logging 当我让我的日志视图页面构建查询时,以下资源不可选择:
当我关注这篇文章时:https ://cloud.google.com/load-balancing/docs/https/https-logging-monitoring
我看不到复选框
我还可以在我的“后端服务详细信息”屏幕上看到日志记录已关闭(屏幕截图底部),但是当我编辑它时,我没有选择打开它......
我的结论是没有生成 CDN 日志,并且设置不正确。但我不知道还能去哪里看,因为 CDN 日志记录应该是自动发生的。
我还可以做些什么?
这是我设置连接到负载均衡器和 CDN 的无服务器 neg 所遵循的文档。
https://cloud.google.com/load-balancing/docs/negs/setting-up-serverless-negs
google-cloud-networking - 如何验证 Cloud CDN 响应是否是缓存命中(或来自 CDN)
我在启用了 Cloud CDN 的 Google Cloud HTTP(S) 负载平衡器后面有一个后端 GCS 存储桶。
我正在尝试根据响应标头回答这些问题:
- 此响应是从 CDN 提供的吗
- 如果是,哪个位置/地区
- 这是缓存命中/未命中吗
这是响应标头。基于cache-control
,理论上,这应该被缓存。但是,我没有看到可以验证 CDN 正常工作的迹象。同样,所有其他标头x-goog-*
似乎Server: UploadServer
都来自 GCS 服务器,而不是 CDN。
例如,Cloudflare 提供以下响应标头:
- 请求在哪里送达:
cf-ray: 5be4505beb76bca2-SEA
- 缓存状态是什么:
cf-cache-status: REVALIDATED
- 我的请求是直接点击 CDN 还是我的后端
server: cloudflare