配置 nginx 以允许 max-age=0 请求

配置 nginx 以允许 max-age=0 请求

我使用 nginx 作为反向代理proxy_cache。后端正在设置cache-control响应标头,这使得 nginx 在可能的情况下从缓存中提供响应。

但是我想通过设置请求标头来允许客户端绕过缓存Cache-Control:max-age=0。这样用户可以通过CTRL+R浏览器点击来获取最新副本。默认情况下,nginx 似乎会忽略Cache-Control请求标头。

如何配置 nginx 以便每当客户端请求资源时从后端获取最新副本并更新缓存Cache-Control:max-age=0

答案1

你可以使用proxy_cache_bypass

proxy_cache_bypass  $http_cache_control;

Cache-Control这将导致 nginx在客户端的 HTTP 请求中的标头存在的情况下获取文档的最新副本。

请注意,后端生成的响应仍然有资格进行缓存。如果您想取消其缓存资格,请使用相同的参数proxy_no_cache指令也是如此。

来源:http://wiki.nginx.org/HttpProxyModule#proxy_cache_bypass


Cache-Control: max-age=0如果您特别希望仅在客户端在标头中包含时绕过缓存(例如,明确不支持另一个变体Cache-Control: no-cache,这实际上应该是对页面新副本的更强烈偏好max-age=0),那么您可以使用以下命令,但由于这样的限制,我不建议使用:

set $cc_ma  0;
if ($http_cache_control = "max-age=0") {    # honour ⌘R, ignore ⇧⌘R (yes, bad idea!)
    set $cc_ma  1;
}
proxy_cache_bypass  $cc_ma;

顺便说一句,还有Pragma: no-cache,这显然无法解释,尽管在我有限的实验中,它总是伴随着Cache-Control: no-cache,所以,原始的单行代码可能会做得最好。

请注意,Cache-Control: max-age=0当您点击重新加载或者⌘RPragma: no-cache\r\nCache-Control: no-cache当你Shift 重新加载或者⇧⌘R

相关内容