Nginx反向代理缓存需先在http块定义proxy_cache_path创建共享内存区,再于server或location中配置proxy_cache_key、proxy_cache_valid,并在location中启用proxy_cache及proxy_cache_use_stale等指令。

要在 Nginx 中启用基础的反向代理缓存,核心是正确配置 proxy_cache 相关指令,它不是开个开关就能用的功能,而是需要定义缓存区、设置缓存键、控制响应是否可缓存,并在 location 块中显式启用。
定义共享内存缓存区(proxy_cache_path)
这是缓存功能的前提,必须放在 http 块中,不能写在 server 或 location 里:
-
语法示例:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; -
keys_zone=my_cache:10m表示创建一个名为my_cache的共享内存区,大小为 10MB,用于存储缓存键和元数据; -
max_size=1g控制磁盘缓存总容量上限; -
inactive=60m表示若某缓存条目 60 分钟内未被访问,会被自动清理; -
use_temp_path=off推荐关闭,避免临时文件写入带来额外 I/O 开销。
设置缓存键与缓存有效性(proxy_cache_key 和 proxy_cache_valid)
这两项通常放在 server 或 location 块中,影响缓存命中率和内容新鲜度:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
-
proxy_cache_key "$scheme$host$request_uri";是常用且稳妥的键值,包含协议、域名和完整 URI;如需忽略某些参数(如跟踪用的 utm_),可配合map指令预处理; -
proxy_cache_valid 200 302 10m;表示对状态码为 200 或 302 的响应缓存 10 分钟;也可按状态码分层设置,例如proxy_cache_valid 404 1m;; - 注意:后端响应中带
Cache-Control: no-cache、Set-Cookie或Vary: *等头时,默认不会被缓存,需用proxy_ignore_headers显式覆盖(谨慎使用)。
在 location 中启用缓存并透传请求
仅定义缓存区还不够,必须在具体代理位置启用它:
- 添加
proxy_cache my_cache;(名称要和keys_zone一致); - 加上
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;可提升可用性——当后端异常或更新中,仍可返回旧缓存; - 建议开启
add_header X-Proxy-Cache $upstream_cache_status;便于调试,响应头中会出现HIT、MISS、BYPASS等状态; - 别忘了保留基本代理指令,如
proxy_pass http://backend;、proxy_set_header Host $host;等,否则请求无法正确转发。
验证与常见注意事项
配置完成后 reload Nginx,可通过日志和响应头确认是否生效:
- 首次请求响应头含
X-Proxy-Cache: MISS,再次请求变为HIT,说明缓存已工作; - 确保
/var/cache/nginx目录存在且 Nginx 工作进程(如 www-data 或 nginx 用户)有读写权限; - 默认不缓存带 Cookie 的请求,如需缓存登录态页面,需配合
proxy_cache_bypass和proxy_no_cache精确控制; - 缓存不自动清除,修改后端内容后,需依赖
inactive超时或手动执行proxy_cache_purge(需启用ngx_http_proxy_cache_purge模块)。

















