nginx默认内置proxy_cache和fastcgi_cache模块,无需额外编译;但缓存清理需手动集成第三方ngx_cache_purge模块,且必须与nginx版本严格匹配并源码编译。

Nginx 默认已内置 proxy_cache 和 fastcgi_cache 模块,无需额外编译添加——只要不是极简定制版(如某些 Alpine 小体积镜像),标准发行版或源码编译安装的 Nginx 都支持反向代理缓存功能。
真正需要“添加”的,其实是 缓存清理能力(如按 URL 清除缓存),这依赖第三方模块 ngx_cache_purge。它不随 Nginx 原生发布,必须手动编译集成。
一、确认原生缓存模块是否可用
运行以下命令检查:
nginx -V 2>&1 | grep -o with-http_proxy_module
若输出 with-http_proxy_module,说明 proxy_cache 功能就绪(该模块是 proxy_cache 的前提)。
再检查配置语法是否识别缓存指令:
nginx -t
如果出现 unknown directive "proxy_cache",说明当前 Nginx 是精简版(如某些 OpenResty 或容器镜像移除了该模块),需重新编译或换用完整版。
二、如需支持缓存清除(/purge),需编译 ngx_cache_purge
⚠️ 注意:ngx_cache_purge 必须与 Nginx 版本严格匹配(例如 Nginx 1.24.x 对应 purge 3.0+),且仅支持源码编译,不支持动态加载(.so)。
基本步骤如下:
- 下载对应版本的
ngx_cache_purge(如 https://www.php.cn/link/9d297429bdc9f291d740898618abe241) - 解压后进入 Nginx 源码目录,执行:
./configure \ --add-module=/path/to/ngx_cache_purge \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ # 其他原有参数保持一致 make && make install
- ✅ 安装后必须
nginx -s stop && nginx(完全重启),nginx -s reload会失败并报unknown directive "proxy_cache_purge"。
三、启用缓存只需配置,不涉及模块开关
只要模块存在,以下配置即可启用缓存(放在 http{} 块中):
# 1. 定义缓存区(必须,且只能在 http 级)
proxy_cache_path /data/nginx/cache
levels=1:2
keys_zone=my_cache:100m
inactive=1d
max_size=20g
use_temp_path=off;
# 2. 在 server 或 location 中启用
server {
location ~ \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 404 1m;
proxy_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache-Status $upstream_cache_status;
}
}
?
$upstream_cache_status可返回HIT/MISS/EXPIRED/STALE等状态,用于调试。
四、常见误区提醒
-
proxy_cache不是独立模块,而是http_proxy_module的子功能,启用 proxy 就默认可用 - 缓存路径
proxy_cache_path不能写在 server 或 location 内,否则启动报错 -
proxy_cache_valid必须明确指定响应码(如200)或用any,否则不生效 - 若后端返回
Cache-Control: no-cache或Set-Cookie,Nginx 默认不缓存;需加:proxy_ignore_headers Cache-Control Expires Set-Cookie;
不复杂但容易忽略。











