如何彻底关闭宝塔面板反向代理的缓存?
为了能快速了解并处理您的问题,请提供以下基础信息:面板、插件版本:面板:免费版 9.4.0系统版本:系统:CentOS 7.9.2009 x86_64(Py3.7.9)
问题描述:如何彻底关闭宝塔面板反向代理的缓存?
我建立一个纯静态nginx网站,同时绑定域名A、B、C,反向代理至127.0.0.1:2086(后端为内网穿透frp的http端口,会根据不同的域名显示不同的内网服务)
现在存在的问题就是会缓存页面js等,导致打开对应域名无法显示对应内网服务。
比如域名A对应的服务是Docker的“Portainer”面板,缓存后,打开域名B和C都是显示的“Portainer”缓存加载页面,只不过加载不出来,因为frp后端对应的B和C的资源没有请求的内容。
而使用诸如A:2086,B:2086,C:2086的域名+端口的方式就可以访问到正确的内网服务内容。
最神奇的就是,我把内网A对应的“Portainer”服务给停了,访问A:2086是404了,访问域名A、B、C的80和443端口仍然加载缓存的“Portainer”首页加载页面。
所以,如何彻底禁用现在版本宝塔面板反向代理的缓存?我确定这是个bug,因为之前使用的是7.x的版本,一切正常,手欠点了下更新:'(,一切都回不去了。
临时解决办法:删除缓存rm -rf /www/server/nginx/proxy_cache_dir/*,当时能正常显示各自域名对应的服务,但是第二天又都显示缓存了。
相关截图(日志、错误):反向代理配置已禁用缓存,主配置中无任何cache, expires字样,以下是反向代理的配置:
#PROXY-START/
location ^~ /
{
proxy_pass http://127.0.0.1:2086;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
# proxy_hide_header Upgrade;
#add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
#解决 499 服务端超时客户端强制关闭
proxy_ignore_client_abort on;
#如果expires 和 add_header 同时开启的情况下,则add_header优于expires生效
#Cache-Control比Expires可以控制的多一些, 而且Cache-Control会重写Expires的规则
#设置禁止浏览器缓存,每次都从服务器请求
add_header Cache-Control no-cache;
add_header Cache-Control private;
#设置缓存上面定义的后缀文件缓存到浏览器的生存时间
expires -1s;
}
#PROXY-END/
盲猜是NGINX把2086端口的反向代理都缓存到一个文件夹,不同域名调用缓存的时候就窜站了。
因为我试过建立3个不同的项目,分别绑定域名A、B、C,但是均反向代理指向2086端口,初始访问正常,但第二天仍全部显示相同缓存内容:'(
记录一下,已经解决了,用的deepseek给的终极解决方案(分步操作)
第一步:彻底禁用Nginx缓存
请按以下配置修改你的反向代理配置:
nginx
复制
location ^~ / {
proxy_pass http://127.0.0.1:2086;
# 强制禁用代理缓存(最关键的两行)
proxy_cache off;
proxy_buffering off;
# 防止任何形式的缓存(包括浏览器和CDN)
add_header Cache-Control "no-cache, no-store, must-revalidate, max-age=0";
add_header Pragma "no-cache";
expires -1;
# 确保不同域名的缓存键隔离(重要!)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 其他保持默认...
}
第二步:检查Nginx是否有隐藏缓存配置
检查全局缓存配置
在 /etc/nginx/nginx.conf 或 /www/server/nginx/conf/nginx.conf 中搜索 proxy_cache_path,如果存在类似配置:
nginx
复制
proxy_cache_path /www/server/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:20m inactive=1d max_size=5g;
请直接注释或删除这一行,并重启Nginx。
检查站点级缓存
在宝塔面板的网站设置中,检查是否意外开启了"静态缓存"或"伪静态"中的缓存规则。
第三步:清除残留缓存并重启服务
bash
复制
# 清除Nginx缓存目录
rm -rf /www/server/nginx/proxy_cache_dir/*
# 重启Nginx
systemctl restart nginx
第四步:验证缓存是否生效
通过curl命令检查响应头
执行以下命令查看响应头是否包含缓存禁用标记:
bash
复制
curl -I http://域名A
应返回:
复制
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Pragma: no-cache
Expires: -1
强制刷新测试
用浏览器无痕模式访问不同域名,观察是否仍存在窜站问题。
页:
[1]