要让Nginx proxy_cache缓存POST响应,必须同时满足四点:显式启用POST方法(proxy_cache_methods GET HEAD POST)、定义并启用缓存区(proxy_cache_path + proxy_cache)、构造含请求体的缓存键(proxy_cache_key含$request_body且proxy_buffering on)、明确设置状态码有效期(如proxy_cache_valid 200 201 30s)。

要让 Nginx 的 proxy_cache 缓存 POST 请求的响应,不能只改 proxy_cache_methods,它只是“准入开关”,必须配合其他关键配置才能真正生效。核心是四点齐备:方法放行、缓存区就位、缓存键可区分、有效期明确。
必须显式启用 POST 方法
proxy_cache_methods 默认只允许 GET 和 HEAD,POST 需手动加入,且必须保留 GET 和 HEAD(Nginx 要求至少两个方法):
- 写法示例:
proxy_cache_methods GET HEAD POST; - 该指令需放在启用
proxy_cache的location块内,否则无效 - 仅加这行不会触发缓存——它只是让 POST 请求“有资格”进入后续缓存流程
必须定义并启用缓存区
没有可用的缓存区,所有缓存指令都形同虚设:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 在
http块中定义缓存路径和共享内存区:proxy_cache_path /var/cache/nginx/post_cache levels=1:2 keys_zone=post_cache:10m max_size=1g inactive=60m use_temp_path=off; - 在对应
location中绑定该区域:proxy_cache post_cache; - 确保磁盘路径存在且 Nginx 进程有读写权限
必须构造能区分不同 POST 的缓存键
默认缓存键不含请求体,所有 POST 会共用一个缓存项,导致响应错乱:
- 推荐 key 写法:
proxy_cache_key "$scheme$request_method$host$request_uri$args$request_body"; - 需开启
proxy_buffering on;(默认开启),否则$request_body可能为空 - 确保
client_max_body_size足够大,避免因体过大被截断 - 若后端对签名头敏感,也可用
$http_x_signature替代或补充$request_body
必须明确设置响应状态码的有效期
不指定 proxy_cache_valid,即使 POST 命中缓存也会直接回源:
- 例如:
proxy_cache_valid 200 201 30s; - 不能依赖
proxy_cache_valid any 30s;,Nginx 对非 GET/HEAD 的any支持有限且行为不稳定 - 建议按实际接口返回码精确配置,如搜索类 POST 常返回 200,表单提交可能返回 201
不复杂但容易忽略:四个条件缺一不可,少一个 POST 就不会进缓存。缓存 POST 的前提,是你确认该接口是幂等、无副作用、响应稳定——比如内部搜索 API 或 GraphQL 查询,而不是用户登录或支付提交。

















