Nginx模块fastcgi_cache的几个注意点
这篇讲的是,作者在配置Nginx的fastcgi_cache模块时,明明参数都设对了,缓存却一直不生效、状态始终是MISS的诡异经历。通过strace工具抓包后,他发现是Discuz论坛程序默认返回的 `Cache-Control: no-cache` 响应头,直接导致Nginx放弃了缓存。 作者没有停留在表面,而是深入到Nginx源码层面,找到了关键的判断逻辑。他总结出:当fastcgi响应头中包含 `Set-Cookie`、`Expires` 时间过早或 `Cache-Control` 指向不缓存时,即使配置了cache,Nginx也会直接跳过。文章清晰地展示了从“配置无误却不生效”到“抓包定位干扰源”,再到“查阅源码验证规则”的完整排查链路。 对于实际运维或开发人员,这提醒我们:缓存是一个“端到端”的决策过程,上游应用的“不缓存”响应头拥有最高优先级。文末附带的Nginx配置示例和缓存状态头调试方法,也为快速定位类似问题提供了实用工具。