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

时间:2018-02-22 09:03:16

标签: caching nginx cloudfoundry

我使用Staticfile buildpack在云代工厂托管了一个简单的HTML单页面应用程序。每当我使用cf push执行新版本时,浏览器在打开页面时仍会显示以前的(缓存)版本。我需要手动点击浏览器上的刷新按钮,我不想要。

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

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

1 个答案:

答案 0 :(得分:2)

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

How to control web page caching, across all browsers?

至于配置NGINX本身,我找到this gist helpful来解释各种可用选项。

现在对于staticfile-buildpack,从他们的some of their issues判断,听起来最简单的方法是使用"位置包括"功能本质上允许你混合你自己的自定义nginx配置(它将结束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上写一篇博文,在我的一个静态网站上设置自定义404页面。他们之后显然添加了first-class support for that particular feature,但帖子确实举例说明了我如何构建includes并将其添加到Staticfile配置中。

希望有所帮助!