Nginx添加头和缓存控制

11
当您在nginx中使用add_header指令时,该头部信息被添加到来自原始服务器的响应中。假设原始服务器返回cache-control public, max-age=60。但是在nginx反向代理位置中,您设置了如下内容:add_header cache-control public, max-age=10。这究竟会发生什么呢?我可以想到两种不同的情况:
1)Nginx尊重来自原始服务器的cache-control头部信息,并将内容存储在其缓存中,有效期为60秒。然后用已覆盖的头部信息传递响应,导致客户端将资源存储在其缓存中,有效期为10秒。
2)Nginx首先覆盖响应头,然后解释它们。它使用10秒的有效期存储该资源,并将响应传递给客户端,客户端也将其缓存在有效期为10秒的缓存中。
2个回答

13

Nginx会在源服务器之前添加它的标头,因此你将会有:

cache-control: public, max-age=10
cache-control: public, max-age=60

解决方法是使用nginx v1.4.3版本的more_set_headers和more_clear_headers模块,以便替换或清除来自源头的标头。

您可以从这里下载该模块。
这里是如何下载nginx 1.4.3并安装它的方法。
这里是如何使用指令的方法。


5
如果您想完全丢弃原始服务器头部,可以添加以下内容:

proxy_hide_header 'Cache-Control';
add_header 'Cache-Control' "public, max-age=10";

这将删除原始标题并添加自己的标题。

如果您只想在NGINX中硬编码您的“Cache-Control”头,并且不关心上游服务器的响应头 - 这似乎是最简单的解决方案。 - Oliver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接