nginx 默认不缓存post请求,因其不在默认缓存方法列表(仅get、head)中;需确保未误配proxy_cache_methods启用post缓存,并推荐添加proxy_cache_bypass $request_method强化绕过。

确认 POST 确实没进缓存流程
POST 方法不在 Nginx 缓存默认支持的方法列表里(仅 GET、HEAD)。只要没显式添加 POST,它就不会参与缓存逻辑——连 key 都不生成,更不会查磁盘或内存。
避免手动开启 POST 缓存导致“反向绕过”
以下配置非常危险,除非你明确知道后果,否则不要加:
-
不要写
proxy_cache_methods GET HEAD POST; -
不要写
fastcgi_cache_methods GET HEAD POST; - 如果 location 中已有这类指令,直接删掉;它会让所有 POST 进入缓存流水线,极易引发数据错乱
用 proxy_cache_bypass 主动强化绕过(可选但推荐)
即使默认不缓存,也建议加一层显式控制,防配置漂移或方法混用:
- 在启用缓存的 location 块中加入:
proxy_cache_bypass $request_method; - 因为
$request_method对 POST 返回字符串 "POST"(非空、非 "0"),触发 bypass - 同时配
proxy_no_cache $request_method;,确保响应也不被缓存
检查后端响应头是否干扰缓存判断
有些后端会在 POST 响应里加 Cache-Control: public, max-age=300,虽然 Nginx 默认忽略 POST,但如果前面误开了 proxy_cache_methods,这类头就会生效。建议:
- 用 curl 测试真实响应:
curl -X POST -I https://your.site/api/submit - 观察返回头中是否有
Cache-Control、Set-Cookie、Vary等字段 - 如有,且你不希望它们影响缓存策略,可在 location 中加:
proxy_ignore_headers Cache-Control Set-Cookie Vary;











