时刻网

白皮书

nginx软件为什么无法通过URL清除反向代理缓存

nginx

今天晚上按照惯例,宅家研究了一下nginx软件,在新建立好反向代理站点后,nginx死活无法通过浏览器URL访问的方式,来清理服务器上的反向代理缓存。

站点配置文件中,清除代理缓存的规则如下

location ~ /purge(/.*) {
    proxy_cache_purge cache_one $host$1$is_args$args;
}

访问 https://b.inetpub.cn/purge/admin.css 出现了css的源代码,而不是 successful purge 的页面。

后来我在想,会不会是nginx软件在编译安装时,没有启用 purge 模块。紧接着我打开了终端,输入命令 nginx -V 2>&1 | grep ngx_cache_purge。结果是已经包含ngx_cache_purge模块了。好的,那我们跳过这一步骤。

第二步,我又检查了一遍站点配置文件中,并没有优先于清除代理缓存的规则的 location 代码部分。真是奇了怪了。

第三步,我打开了nginx的全局配置参数,其中包含了 proxy.conf 的一个配置引用,其中 proxy_cache 指令使用的缓存区名称。比如:cache_one,也和站点配置中的名字一致,这样,我来到了第四步。

检查站点配置中 location 模块的拼写部分,发现了端倪。

第一,我们得确保 purge location 在静态文件规则之前。第二:验证 location 优先级:注意 ^~、=、~、~*、普通前缀的匹配顺序。

正确的书写方法应该为:

location ^~ /purge {
    rewrite ^/purge/(.*) /$1 break;
    proxy_cache_purge cache_one "$host$uri$is_args$args";
}

至此,久违的成功 Successful purge 页面,成功出现。耶

雁过留声


评论列表: 表情

  • [2026-04-05 21:05] lm冰彬: 已阅