proxy_cache_methods 指令用于指定 nginx 中可被缓存的 http 方法,默认仅 get 和 head;需配合 proxy_cache 使用,且在 http/server/location 块中配置;若需缓存 post 等非幂等方法,须显式声明并合理设置 proxy_cache_key。

proxy_cache_methods 是 Nginx 中用于指定哪些 HTTP 请求方法可以被缓存的指令,它只在 http、server 或 location 块中生效,且必须配合 proxy_cache 使用。默认值是 GET HEAD,也就是说,只有 GET 和 HEAD 请求会被缓存;其他如 POST、PUT、DELETE 等默认不缓存(即使响应头允许)。
为什么 proxy_cache_methods 很关键
很多用户在 macOS 上配好 Nginx 代理缓存后发现 POST 请求没被缓存,或缓存始终不命中,往往就是忽略了这个指令。Nginx 的缓存机制默认“保守”——只缓存幂等、无副作用的请求。如果你的应用明确支持缓存某些 POST(比如带固定参数的查询接口),才需要主动放开。
常用配置写法(macOS + Homebrew 安装的 Nginx)
编辑你的 Nginx 配置文件(通常是 /usr/local/etc/nginx/nginx.conf 或站点 conf 文件),在对应 location 块中添加:
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
- 允许 GET、HEAD、POST 缓存(需确保后端对相同 POST 请求返回一致响应):
proxy_cache my_cache; proxy_cache_methods GET HEAD POST; proxy_cache_key "$scheme$request_method$host$request_uri$body"; # 注意:含 $body 才能区分不同 POST 内容
- 若还需缓存 PUT/DELETE(极少见,仅测试或特殊网关场景):
proxy_cache_methods GET HEAD POST PUT DELETE;
⚠️ 注意:启用非 GET/HEAD 方法缓存时,务必同步设置合适的 proxy_cache_key(例如加入 $request_body 或 $args),否则不同请求可能命中同一缓存项。
验证缓存是否生效
在 macOS 终端中用 curl 检查响应头:
- 发送两次相同请求(如 POST):
- 观察响应头中是否有
X-Cache: HIT(需你配置了add_header X-Cache $upstream_cache_status;) - 确认 Nginx 缓存目录(如
/usr/local/var/nginx/cache)下有文件生成
常见踩坑点
-
proxy_cache_methods 不影响缓存策略本身,只控制“哪些方法有资格进入缓存流程” —— 即使写了
POST,如果后端返回Cache-Control: no-store,依然不会缓存 -
macOS 默认没有启用缓存模块? —— Homebrew 安装的 Nginx 通常已编译
--with-http_proxy_module和--with-http_cache,无需额外编译;可通过nginx -V 2>&1 | grep -o with-http.*cache确认 -
body 为空时 $request_body 为空字符串 —— 若依赖 body 构建 key,建议搭配
proxy_set_body或使用$http_content_md5(需客户端传)等更稳定方式










