proxy_cache_methods 是白名单开关,仅声明允许缓存的HTTP方法;默认且推荐显式配置为 GET HEAD;缓存 POST 需同时满足四条件:定义缓存区、启用该缓存、白名单含 POST、cache_key 包含 $request_body 并开启 buffering。

proxy_cache_methods 不是用来“限制”缓存方法的,而是显式声明哪些 HTTP 方法**允许进入缓存流程**——它是个白名单开关,不是拦截器。
只允许 GET 和 HEAD(默认行为,推荐显式写出)
绝大多数静态资源、API 查询接口都只需缓存 GET/HEAD。显式配置更清晰,也防误加其他方法:
- 在 location 块中写:
proxy_cache my_cache;
proxy_cache_methods GET HEAD;
这和不写该指令效果一致,但语义明确,后续维护不易出错。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
想缓存 POST?必须同时满足四个条件
仅加 POST 到 proxy_cache_methods 完全无效。缺一不可:
- 全局已定义对应缓存区:
proxy_cache_path /var/cache/nginx/post_cache levels=1:2 keys_zone=post_cache:10m; - location 中启用该缓存区:
proxy_cache post_cache; - 显式声明方法:
proxy_cache_methods GET HEAD POST;(不能只写 POST) - 缓存键能区分不同请求体:
proxy_cache_key "$scheme$request_method$host$request_uri$args$request_body";
注意:需确保proxy_buffering on;且client_max_body_size足够,否则$request_body为空
OPTIONS 请求可以缓存,但要单独处理
跨域预检请求高频、无业务逻辑,适合缓存:
- 加入白名单:
proxy_cache_methods GET HEAD OPTIONS; - 为 204 响应设长有效期:
proxy_cache_valid 204 86400; - 缓存键建议含来源:
proxy_cache_key "$scheme$request_method$host$uri$http_origin";
这些写法是错的,别用
常见误配会导致缓存失效或行为异常:
- 把
proxy_cache_methods写在 http 块顶层,没绑定proxy_cache—— 指令不生效 - 只写
proxy_cache_methods POST;—— GET/HEAD 被排除,静态资源加速全崩 - 尝试加
PURGE、TRACE、CACHE-REFRESH等非标方法 —— Nginx 忽略或报错 - 缓存 POST 却没改
proxy_cache_key,所有 POST 共用一个缓存项,结果互相覆盖

















