用 proxy_ignore_headers expires 可让 nginx 忽略后端 expires 响应头,避免其干扰缓存,再配合 proxy_cache_valid 统一控制缓存时长;若后端还设 cache-control 等禁止缓存头,需一并忽略或覆盖。

直接说结论:用 proxy_ignore_headers Expires 可以让 Nginx 忽略后端返回的 Expires 响应头,从而绕过它的缓存控制逻辑,转而由你配置的 proxy_cache_valid 或其他缓存规则统一决定缓存时长。
为什么需要忽略 Expires?
很多后端应用(比如 PHP、Node.js)会在响应头里写死 Expires: Thu, 01 Jan 1970 00:00:00 GMT 或类似过期时间极短的值,目的是“禁止缓存”。但如果你作为反向代理层,明确知道这些资源其实可以缓存(比如静态图片、API 返回的稳定数据),那后端的 Expires 就成了干扰项。Nginx 默认会尊重它,哪怕你配了 proxy_cache_valid 200 1h,只要后端返回了 Expires,就可能不缓存或只缓存几秒。
怎么配置 proxy_ignore_headers
在 location 或 server 块中加入这一行即可:
proxy_ignore_headers Expires;
如果还想一并忽略其他干扰头,可以多写几个,用空格分隔:
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
proxy_ignore_headers Expires Cache-Control Set-Cookie;-
proxy_ignore_headers只影响缓存决策,不影响实际响应头是否发给客户端;若你还想隐藏这些头,得额外加proxy_hide_header Expires; - 该指令作用于当前作用域,建议放在
location块里,避免全局误伤
配合 proxy_cache_valid 才真正生效
光忽略 Expires 不够,你还得告诉 Nginx “那到底该缓存多久”。例如:
proxy_cache_valid 200 302 1h;<br>proxy_cache_valid 404 1m;
这样,即使后端返回 Expires 是过去的时间,Nginx 也会按你定义的规则缓存 1 小时(状态码 200/302)或 1 分钟(404)。
注意边界情况
有些后端还会同时设置 Cache-Control: no-cache 或 private,这类头默认也会阻止缓存。如果遇到仍不缓存的情况,检查 error log 是否有类似 cache missed (no cacheable response) 的提示,并考虑补充:
proxy_ignore_headers Cache-Control;- 但要注意:
Cache-Control: public, max-age=3600这类正向指令不该忽略,否则反而丢掉有用信息;更稳妥的做法是只忽略明确禁止缓存的组合,比如no-cache、private、no-store - Nginx 不会自动重写
Cache-Control头,所以客户端仍会收到原始值;如需统一控制,可用add_header Cache-Control "public, max-age=3600";覆盖










