如何配置 cloudfoundry staticfile buildpack 以防止在发布后从浏览器缓存加载

How to configure cloudfoundry staticfile buildpack to prevent loading from browser cache after a release

我有一个简单的 HTML 单页应用程序托管在 cloud foundry 上,使用 Staticfile buildpack。每当我使用 cf push 发布新版本时,浏览器在打开页面时仍会显示以前的(缓存的)版本。我需要手动点击浏览器上的刷新按钮,我不想这样做。

如何在 CloudFoundry 上配置 nginx,使修改后的 html 页面总是从服务器而不是缓存重新加载?我想 CloudFoundry 中的这个 szenario 的默认 HTTP 缓存设置没有正确设置?

注意:在 HTML 页面本身中,我已经对版本化的 javascript 和 css 文件名使用缓存无效化。

您需要在您的 NGINX 配置中设置一些 Cache-Control headers 以要求浏览器不缓存您的静态内容。这个对更一般问题的回答很好地解释了您究竟需要设置什么:

How to control web page caching, across all browsers?

至于配置 NGINX 本身,我发现 this gist helpful 解释了各种可用的选项。

现在 staticfile-buildpack,从他们的 some of their issues, it sounds like the easiest way will be to use the "location include" feature which essentially lets you mixin your own custom nginx config (it will end up here in the final generated nginx.conf 来看。我还没有测试过这个,但我想你会想要包括像这样的东西:

location <some-location-matcher*> {
  add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
  expires off;
  proxy_no_cache 1;
}

* 不确定是否要处理每个文件,只是 html 个文件,还是其他,但这里是 more info on how to use the nginx location matchers.

您应该可以添加一个类似于上述代码段的文件并将其包含在您的 Staticfile 中,如下所示:

location_include: /path-in-app-to-where-you-placed-your-config/filename.conf

它不能直接应用,但如果你想要更多示例,我不久前在 how I used the Staticfile buildpack's location_include feature to set up custom 404 pages on one of my static sites. They've since apparently added first-class support for that particular feature 上写了这篇博客 post,但是 post 确实给出了我如何使用的示例构造我的 includes 并将它们添加到 Staticfile 配置中。

希望对您有所帮助!