显式配置 proxy_cache_methods get head 是最明确、最安全的做法,可避免误加其他方法、提升可读性、防止版本升级导致默认行为变化,且必须与 proxy_cache 同在启用缓存的 location 块中生效。

直接在启用缓存的 location 块中写 proxy_cache_methods GET HEAD; 即可,这是最明确、最安全的做法。
为什么显式配置比不写更好
虽然 Nginx 默认就只允许 GET 和 HEAD 走缓存,但显式写出有三个实际好处:
- 避免后续误加 POST 或其他方法(比如复制配置时没删干净)
- 让配置意图一目了然,方便团队协作和审计
- 防止因 Nginx 版本升级或模块变更导致默认行为意外变化
正确配置位置与依赖条件
该指令必须和 proxy_cache 在同一作用域(通常是 location 块),且只有在缓存已启用的前提下才起作用:
- 不能单独写在 http 或 server 块里而不在启用缓存的 location 中
- 必须配合
proxy_cache指令(指定 keys_zone)才能生效 -
proxy_cache_valid和proxy_cache_key建议同时配置,否则缓存行为可能不符合预期
一个完整可用的示例
以下是一个最小但完整的配置片段,仅对 GET/HEAD 缓存 API 接口:
proxy_cache_path /var/cache/nginx/api_cache levels=1:2 keys_zone=api_cache:20m max_size=1g inactive=30m;
<p>server {
location /api/ {
proxy_pass <a href="https://www.php.cn/link/65b5b8d1f89bf53a5713bc3afdd83e9e">https://www.php.cn/link/65b5b8d1f89bf53a5713bc3afdd83e9e</a>;
proxy_cache api_cache;
proxy_cache_valid 200 302 5m;
proxy_cache_valid 404 1m;
proxy_cache_methods GET HEAD; # 显式限定,关键一行
add_header X-Cache-Status $upstream_cache_status;
}
}</p>
常见误区提醒
注意这几个容易踩的坑:
- 写成
proxy_cache_methods GET;—— 不合法,Nginx 要求至少列出两个方法 - 漏掉
proxy_cache—— 即使写了proxy_cache_methods,也不会触发任何缓存逻辑 - 把该指令放在没有
proxy_pass的 location 里 —— 缓存流程根本不会启动 - 以为它能“拦截”或“拒绝”POST 请求 —— 它只是跳过缓存,请求仍会正常转发给后端











