要开启标准代理缓存,关键需同时配置proxy_cache_path定义缓存区、proxy_cache启用缓存、proxy_cache_methods限定GET/HEAD方法、proxy_cache_valid指定有效状态码,四者缺一不可。

要利用 proxy_cache_methods GET HEAD 开启标准的代理缓存机制,关键不是仅配置这一行,而是将其嵌入 Nginx 的完整缓存上下文中。该指令本身只是告诉 Nginx:只对 GET 和 HEAD 请求 执行缓存(不缓存 POST、PUT 等),它必须配合缓存区定义、缓存键设置、响应头控制等才能真正生效。
1. 定义共享内存缓存区(必需)
Nginx 缓存依赖 proxy_cache_path 指令预先声明缓存存储路径和共享内存区域。没有它,proxy_cache_methods 将无处落脚:
proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
-
keys_zone=my_cache:10m 是核心——为后续
proxy_cache my_cache提供引用名 -
use_temp_path=off推荐启用,避免临时文件写入影响性能 - 路径需确保 Nginx 工作进程有读写权限(如
chown -R nginx:nginx /var/cache/nginx/proxy)
2. 在 location 块中启用缓存并指定方法
在反向代理的 location 中,显式调用缓存并限制可缓存的方法:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_methods GET HEAD; # ← 这里生效:仅缓存 GET/HEAD
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
}-
proxy_cache_methods GET HEAD默认值就是GET HEAD,显式写出是为明确意图、避免被覆盖 - 务必搭配
proxy_cache_valid,否则即使方法匹配,Nginx 也不会缓存任何状态码(默认不缓存任何响应) - HEAD 请求会复用对应 GET 的缓存实体(不重复存储),仅返回响应头,节省带宽
3. 控制缓存键与跳过逻辑(防误缓存)
默认缓存键只含 $scheme$proxy_host$request_uri,但实际中常需排除干扰项:
- 用
proxy_cache_bypass $arg_nocache实现手动刷新(如访问/api?nocache=1跳过缓存) - 用
proxy_ignore_headers Cache-Control Expires Set-Cookie可覆盖上游响应头的缓存指令(谨慎使用) - 若后端对不同 User-Agent 返回不同内容,需将
$http_user_agent加入缓存键:proxy_cache_key "$scheme$proxy_host$request_uri $http_user_agent";
4. 验证缓存是否真正工作
通过响应头和日志确认行为:
- 成功命中缓存时,响应头会带
X-Cache: HIT(需自行添加:add_header X-Cache $upstream_cache_status;) - 查看 Nginx error 日志级别设为
info,可看到cache miss/cache hit记录 - 用
curl -I http://your-domain/多次请求,观察Age头是否递增(表示缓存复用)
不复杂但容易忽略:proxy_cache_methods 是“开关”而非“启动器”,它只过滤请求类型;真正让缓存跑起来的是 proxy_cache_path + proxy_cache + proxy_cache_valid 这三者缺一不可。

















