nginx动态内容“实时更新”指可控低延迟生效,非秒级同步;需配置:1.分层缓存有效期;2.后台更新+stale容错;3.请求头主动刷新;4.忽略干扰响应头并严控用户态缓存。

1. 设置合理且分层的缓存有效期(proxy_cache_valid)
动态内容不能一概设长缓存,应按响应状态和业务敏感度分级设定:
-
高频但容忍短时旧数据的内容(如文章列表、商品摘要):设
proxy_cache_valid 200 302 60s—— 1分钟内自动过期,兼顾性能与新鲜度 -
错误页或兜底内容(如 404、503):可设稍长(
proxy_cache_valid 404 5m),避免反复探活加重后端压力 -
明确不缓存的内容(如用户中心、支付页):用
proxy_cache_valid any 0s或直接跳过缓存逻辑
2. 启用后台更新(proxy_cache_background_update)
当缓存过期时,Nginx 默认会阻塞后续请求,等回源完成再返回;开启后台更新后,它会:立即返回旧缓存(保证可用性),同时异步拉取新内容并更新缓存。
只需一行:
proxy_cache_background_update on;搭配 proxy_cache_use_stale updating 可进一步增强容错——即使后台更新失败,仍可用旧缓存服务用户。
3. 提供主动刷新入口(proxy_cache_bypass + 自定义头)
运维或发布系统需要“立刻生效”时,可通过请求头触发绕过缓存并强制回源,同时让新响应自动覆盖旧缓存:
- 在 location 中添加:
proxy_cache_bypass $http_x_cache_bypass;
proxy_no_cache $http_x_cache_bypass; - 发布后,用 curl 发起带标记的请求:
curl -H "X-Cache-Bypass: 1" https://example.com/api/news
此次请求不读缓存、不写缓存;但后续普通请求将命中刚生成的新缓存
4. 避免被响应头干扰(proxy_ignore_headers)
后端应用(如 PHP/Node.js)常自带 Cache-Control: no-cache 或 Set-Cookie,这会导致 Nginx 默认不缓存响应。若你确认该动态内容适合缓存,需显式忽略:
⚠️ 注意:Set-Cookie 被忽略后,含用户态的页面(如登录态首页)**绝不可缓存**,务必配合 proxy_cache_bypass 或 location 分离做精准控制。











