反向代理缓存如何刷新单独url ng如何配置
一、安装ngx_cache_purge模块
-
下载模块:需重新编译Nginx并添加该模块(若未预装):
bashCopy Codewget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz tar -zxvf ngx_cache_purge-2.3.tar.gz ./configure --add-module=./ngx_cache_purge-2.3 make && make install
-
验证安装:通过
nginx -V
检查是否包含--add-module=ngx_cache_purge-2.3
。
二、配置反向代理缓存及刷新规则
-
定义缓存路径和参数(在
http
块中):nginxCopy Codehttp { proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; proxy_cache_key "$scheme$request_method$host$request_uri"; }
keys_zone=my_cache:10m
:定义缓存区域名称和内存大小。proxy_cache_key
:设置缓存键的生成规则,需与后续清除操作匹配。
-
配置反向代理及缓存规则(在
server
或location
块中):nginxCopy Codeserver { location / { proxy_pass http://backend; proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; } }
proxy_cache_valid
:根据状态码设置缓存时间。
-
添加缓存清除接口:
nginxCopy Codelocation ~ /purge(/.*) { allow 127.0.0.1; # 仅允许本机IP触发清除 deny all; proxy_cache_purge my_cache $scheme$request_method$host$1; }
- 通过
/purge
路径接收清除请求,my_cache
需与缓存区域名称一致。 - 安全限制:通过
allow/deny
限制可触发清除的IP。
- 通过
三、触发缓存刷新
通过发送HTTP请求清除指定URL的缓存:
bashCopy Code
curl -X PURGE http://your-domain.com/purge/path/to/resource
- 示例:清除
http://your-domain.com/images/logo.png
的缓存:bashCopy Codecurl -X PURGE http://your-domain.com/purge/images/logo.png
- 缓存键匹配:URL需与
proxy_cache_key
生成的键完全一致(包括协议、方法、域名和URI)。
四、替代方案(无purge模块)
若无法安装模块,可通过以下方式绕过缓存:
- 请求头控制:在请求中添加
Cache-Control: no-cache
,强制Nginx回源:nginxCopy Codelocation / { proxy_pass http://backend; proxy_cache_bypass $http_cache_control; }
- 手动删除文件:根据
proxy_cache_key
生成的哈希值,定位并删除缓存目录中的文件(需谨慎操作)。
注意事项
- 缓存键一致性:
proxy_cache_key
的配置需与清除请求中的参数完全匹配。 - 安全性:仅允许受信任的IP或内网访问
/purge
接口。 - 测试验证:通过
curl -I
检查响应头中的X-Cache-Status
字段(如HIT
或MISS
)确认缓存状态。