Nginx可缓存POST静态请求,需满足方法允许、缓存键唯一、响应可缓存三要素,并配置proxy_cache_methods、proxy_cache_key(含$request_body)、proxy_cache_valid及防护规则。

可以直接开启,但必须明确“POST 静态请求”这个前提——它不是指 HTTP 方法本身静态,而是指该 POST 请求语义上无副作用、响应内容稳定、不依赖用户会话或实时状态。Nginx 默认禁用 POST 缓存,启用需同时满足方法允许、缓存键唯一、响应可缓存三要素。
确认请求是否真属“静态”
所谓“POST 静态请求”,典型如:
- 搜索接口(提交 JSON 查询条件,返回固定结构结果)
- GraphQL 查询(POST 提交 query+variables,响应由输入完全决定)
- 表单预渲染(如 CMS 后台提交配置 ID,返回只读 HTML 片段)
- 批量查字典(POST 提交 ID 列表,后端查库返回 JSON 数组)
若请求含 Cookie、Authorization、用户私有参数,或响应带 Set-Cookie、Cache-Control: private,就不适合缓存。
基础配置四步到位
在对应 location 块中配置以下四项,缺一不可:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
启用缓存区:确保已定义
proxy_cache_path,并在 location 中指定proxy_cache my_cache; -
放开方法限制:
proxy_cache_methods GET HEAD POST;(不能只写POST,否则 GET/HEAD 会失效) -
构造唯一缓存键:必须区分不同请求体,推荐写法:
proxy_cache_key "$scheme$request_method$host$request_uri$args$request_body";
注意:$request_body要求proxy_buffering on;且client_max_body_size足够(如1m),否则可能为空 -
声明有效响应与有效期:
proxy_cache_valid 200 201 30s;(根据业务设为 10–300 秒较安全)
防止误缓存的关键防护
即使请求是静态的,也要加隔离层:
- 对含敏感头的请求直接跳过缓存:
proxy_no_cache $http_cookie $http_authorization; - 避免缓存带 Set-Cookie 的响应:
proxy_ignore_headers Set-Cookie;(若后端误加了该头) - 高并发下防穿透:
proxy_cache_lock on;+proxy_cache_use_stale updating; - 仅对明确路径启用,例如:
location /api/v1/search { ... },而非location /
验证是否生效
上线后快速验证两件事:
- 加响应头:
add_header X-Cache-Status $upstream_cache_status;,连续发相同 POST 请求,看是否从MISS变成HIT - 观察后端日志:同一请求体重复调用,后端 access log 应只记录首次,后续由 Nginx 直接返回
不复杂但容易忽略。

















