首页 > 解决方案 > Nginx缓存:如何忽略'no-cache'但尊重'max-age'就像它是'public'?

问题描述

我想发送给浏览器Cache-Control: no-cache,max-age=120;,因此他们必须重新验证才能使用缓存副本,但这使得Nginx实际上不缓存任何东西,或者至少总是不缓存MISS

而且我不能使用proxy_ignore_headers “Cache-Control”;,因为我必须尊重max-age,并且max-age由上游服务器控制,每种类型的页面都有不同的页面并且可能随着时间的推移而变化,所以它必须由主服务器控制。

应该如何配置才能得到这个?

PD:或者一种让 Nginx 尊重一些自定义 X-Cache-Control 标头的方法,并使用单独的标头来控制代理和浏览器的缓存。

PD2:我做了这个,显然它有效,但我希望有一个更“官方”的方式:

proxy_hide_header Cache-Control;
proxy_hide_header maxage;
add_header Cache-Control "no-cache,max-age=$upstream_http_maxage";

标签: nginxcachingproxyreverse-proxycache-control

解决方案


我认为而不是proxy_hide_header你应该使用proxy_ignore_headers

更新:

并根据https://stackoverflow.com/a/9232739/279564,您必须同时使用两者。


推荐阅读