文章主题: Galaxy 文档

CDN

了解如何使用 Galaxy 配置 CDN

配置 Galaxy 的 CDN 与在任何上下文中使用 Meteor 的 CDN基本相同。

通常,您不希望从您的 CDN 转发 Cookie,因为这会导致过度缓存。具体来说,您不应转发galaxy-sticky Cookie,因为它会导致为应用程序运行的每个容器缓存一个资产副本。但是,您确实希望将 CDN 配置为转发查询字符串参数。

在您将 CDN 设置为应用程序的源(例如,名为 d12345678.cloudfront.net 的CloudFront 分发,它代理www.exampleapp.com)后,您可以告诉 Meteor 从 CDN 提供静态 JS 和 CSS 资产,方法是

WebAppInternals.setBundledJsCssUrlRewriteHook((url) => {
  return `https://d12345678.cloudfront.net${url}&_g_app_v_=${process.env.GALAXY_APP_VERSION_ID}`;
});


_g_app_v_ 查询参数告诉 Galaxy 仅将此请求发送到与为您提供应用程序 HTML 的容器相同版本的容器。由于应用程序的不同版本可能具有不同版本的 JS 和 CSS(以及因此不同的捆绑文件名),因此您需要确保 CDN 查看实际包含相关文件的容器。

如果没有 CDN,则这不是问题,因为 Galaxy 使用 Cookie 来确保 JS/CSS 请求尽可能路由到与 HTML 相同的容器,并且 Meteor 知道如果不再可能则刷新整个页面。但是,由于您不应将 CDN 配置为转发 Cookie,因此正常的机制不起作用,并且需要使用_g_app_v_ 技术。

如果您有模板中使用的静态资产(例如<img src="foo.png" />)的图像,也希望 CDN 缓存这些资产,则您需要在图像标签中也包含 CDN 前缀和_g_app_v_ 查询参数。结合前面的示例,图像标签将变为<img src="https://d12345678.cloudfront.com/foo.png?_g_app_v_=${process.env.GALAXY_APP_VERSION_ID}" />。我们建议您创建一个助手,仅在生产环境中执行此操作。

更新于:2024/07/15

这篇文章对您有帮助吗?

Share your feedback

Cancel

谢谢!