Nginx add_header 和缓存控制

Posted

技术标签:

【中文标题】Nginx add_header 和缓存控制【英文标题】:Nginx add_header and cache control 【发布时间】:2013-09-30 21:45:00 【问题描述】:

当您在 nginx 中使用 add_header 指令时,标头会添加到来自源服务器的响应中。

假设源服务器返回 cache-control public,max-age=60。但是在 nginx 反向代理位置中,您可以设置如下内容:

add_header cache-control public, max-age=10

这究竟是做什么的?我能想到两种不同的场景:

1) Nginx 尊重来自源服务器的缓存控制标头,并将内容存储在其缓存中,有效期为 60 秒。然后使用覆盖的标头传递响应,导致客户端将资源存储在其缓存中,有效期为 10 秒。

或者..

2) Nginx 先覆盖响应头,然后再解释它们。它以 10 秒的过期时间存储资源,并将响应传递给客户端,客户端也将其缓存在 10 秒的过期时间。

【问题讨论】:

【参考方案1】:

Nginx 在源服务器之前添加其标头,因此您将拥有:

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

并且 origin 标头将替换 nginx 标头。

解决方案?使用具有模块 more_set_headers 和 more_clear_headers 的 nginx v1.4.3 来替换或清除源头。

您可以从here下载模块。Here如何下载nginx 1.4.3以及如何安装它。Here如何使用指令。

【讨论】:

【参考方案2】:

如果您想完全丢弃原始服务器标头,您可以添加:

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

这将剥离原始标题并添加您自己的标题。

【讨论】:

如果你只想在 NGINX 中硬编码 Cache-Control 标头而不关心上游服务器的响应标头 - 这似乎是最简单的解决方案。

以上是关于Nginx add_header 和缓存控制的主要内容,如果未能解决你的问题,请参考以下文章

[转]Nginx 静态资源缓存设置

Nginx缓存设置教程

[nginx]lua控制响应头

nginx add_header 不工作

Nginx指令add_header和proxy_set_header的区别

nginx 配置 缓存更新,后端故障,允许使用过期缓存