proxy_cache_methods 控制哪些http请求方法的响应有可能被缓存,仅作准入开关,默认仅get和head;需显式添加post等方法并配合proxy_cache、proxy_cache_valid、proxy_cache_key等指令才能生效。

proxy_cache_methods 控制 Nginx 哪些 HTTP 请求方法的响应**有可能被缓存**,它本身不开启缓存,只是“准入开关”——只有列在这里的方法,后续缓存流程(如 key 计算、存储、命中判断)才会启动。
默认只允许 GET 和 HEAD
Nginx 默认值就是 GET HEAD。这意味着:
- 所有 GET 请求(带参数或不带)默认可进入缓存流程
- 所有 HEAD 请求也默认参与缓存(常用于轻量预热)
- POST、PUT、DELETE、OPTIONS 等方法默认被直接排除,哪怕响应头再友好也不会缓存
要缓存 POST,必须显式添加且满足配套条件
仅写 proxy_cache_methods GET HEAD POST 远不够,必须同时做到:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 绑定有效缓存区:
proxy_cache my_cache,且my_cache已在http块中由proxy_cache_path正确定义 - 明确设置状态码有效期:
proxy_cache_valid 200 201 30s(不能依赖any) - 缓存键必须区分不同请求:
proxy_cache_key中必须含$request_method,推荐加上$request_body或$args,避免所有 POST 共用一个缓存项
OPTIONS 预检请求也可缓存,但需单独对待
跨域场景下 OPTIONS 请求高频且无业务负载,适合缓存:
- 加入
OPTIONS到proxy_cache_methods列表中 - 为 204 响应设长有效期:
proxy_cache_valid 204 86400 - 缓存键建议包含
$http_origin,支持多源精准缓存:"$scheme$request_method$host$uri$http_origin"
不推荐也不支持的方法
以下方法不应出现在 proxy_cache_methods 中:
-
PURGE、CACHE-REFRESH等自定义方法:Nginx 会忽略或报错 -
PUT、DELETE:语义上代表资源变更,缓存极易引发数据不一致,官方不推荐 - 任意非标准方法(如
SEARCH):除非你确认后端行为幂等且可控,否则跳过










