反向代理缓存如何刷新单独url ng如何配置

一、安装ngx_cache_purge模块

  1. 下载模块‌:需重新编译Nginx并添加该模块(若未预装):

    bashCopy Code
    wget 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
  2. 验证安装‌:通过nginx -V检查是否包含--add-module=ngx_cache_purge-2.3


二、配置反向代理缓存及刷新规则

  1. 定义缓存路径和参数‌(在http块中):

    nginxCopy Code
    http { 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:设置缓存键的生成规则,需与后续清除操作匹配。
  2. 配置反向代理及缓存规则‌(在serverlocation块中):

    nginxCopy Code
    server { location / { proxy_pass http://backend; proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; } }
    • proxy_cache_valid:根据状态码设置缓存时间。
  3. 添加缓存清除接口‌:

    nginxCopy Code
    location ~ /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 Code
    curl -X PURGE http://your-domain.com/purge/images/logo.png
  • 缓存键匹配‌:URL需与proxy_cache_key生成的键完全一致(包括协议、方法、域名和URI)。

四、替代方案(无purge模块)

若无法安装模块,可通过以下方式绕过缓存:

  1. 请求头控制‌:在请求中添加Cache-Control: no-cache,强制Nginx回源:
    nginxCopy Code
    location / { proxy_pass http://backend; proxy_cache_bypass $http_cache_control; }
  2. 手动删除文件‌:根据proxy_cache_key生成的哈希值,定位并删除缓存目录中的文件(需谨慎操作)。

注意事项

  1. 缓存键一致性‌:proxy_cache_key的配置需与清除请求中的参数完全匹配。
  2. 安全性‌:仅允许受信任的IP或内网访问/purge接口。
  3. 测试验证‌:通过curl -I检查响应头中的X-Cache-Status字段(如HITMISS)确认缓存状态。