我使用Staticfile buildpack在云代工厂托管了一个简单的HTML单页面应用程序。每当我使用cf push
执行新版本时,浏览器在打开页面时仍会显示以前的(缓存)版本。我需要手动点击浏览器上的刷新按钮,我不想要。
如何在CloudFoundry上配置nginx,因此修改后的html页面总是从服务器重新加载而不是从缓存中重新加载?我想在CloudFoundry中这个szenario没有正确设置默认的HTTP缓存设置吗?
注意:在HTML页面本身中,我已经使用版本化的javascript和css文件名进行缓存清除。
答案 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
配置中。
希望有所帮助!