博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
批量清除nginx缓存的方法
阅读量:7143 次
发布时间:2019-06-29

本文共 5365 字,大约阅读时间需要 17 分钟。

我公司的一个客户在国外访问测试网站比较麻烦,因此我在一台机器上安装了一个nginx,并且使用nginx的proxy_cache模块做缓存服务器,由于由于修改比较多,每次使用ngx_cache_purge清除cache只能清除几个url,没有很好的办法去清除某个目录的缓存。我研究了nginx的缓存文件格式,发现可以从中提取出url出来,如下图所示,url是以"KEY:"开头以0x0A结尾

bde6c90bbd40a2ae61d490fc23fb5705925d740a

我写了一个程序能够实现

1.提交一批url进行清除对应的cache

2.提交一批url目录可以清除包含这些目录的url,若是提交域名可以清除整站

3.查看某个目录下的缓存文件是否缓存上

4.可以添加多个站点

需要县安装ngx_cache_purge

代码如下

被代理的实际网站的域名,若是都是80的话就是一样即可 "http://www.test.com"=>"http://www.test.com" ); //输出文件 $output=""; $result=array(); $filedirs = array(); //只查看缓存文件,不清除 if($_POST["view"]){ $accessSite=$_POST["accessSite"]; $proxySite=$proxySites[$accessSite]; $clearUrls=array(); $clearUrls=explode ("\n",$_POST["dirs"]); if($$proxySite){ foreach($ds as $d){ $d=str_replace($accessSite, $proxySite,$d); $clearUrls[]=$d; } } scan_dir($cacheDir); $cacheurls = array(); foreach($filedirs as $filename){ if(!is_file($filename)){ continue; } $cacheUrl=getUrlFromCacheFile($filename); if(count($clearUrls)){ $cacheurls[]=$cacheUrl; continue; } foreach($clearUrls as $clearUrl){ $clearUrl=str_replace($accessSite, $proxySite,$clearUrl); $pos=strpos($cacheUrl,$clearUrl); // echo "$cacheUrl,$clearUrl,$pos
"; //比较http://www.b.com/a/b.jpg和http://www.b.com/a if($pos===0){ $cacheurls[]=$cacheUrl; break; } } } }else //清除一批URL if($_POST["urls"]){ $accessSite=$_POST["accessSite"]; $proxySite=$proxySites[$accessSite]; $output.="
执行结果 \n\n"; $urls=explode ("\n",$_POST["urls"]); foreach($urls as $url2){ $url=trim($url2); $output.="------------------------$url start-----------------------------\n"; $pos = strpos($url, $accessSite); if ($pos !== false && $pos==0) { $url=str_replace($accessSite, $proxySite,$url); if(purge($proxyIp,$proxyPort,$url)==0){ $result[$url2]=0; }else{ $result[$url2]=1; } }else{ $output.="skip $url\n"; $result[$url2]=-1; } $output.="------------------------$url end -----------------------------\n"; } $output.="\n"; }else//清除某个目录下的所有文件 if($_POST["dirs"]){ $accessSite=$_POST["accessSite"]; $proxySite=$proxySites[$accessSite]; $clearUrls=array(); $clearUrls=explode ("\n",$_POST["dirs"]); if($$proxySite){ foreach($ds as $d){ $d=str_replace($accessSite, $proxySite,$d); $clearUrls[]=$d; } } scan_dir($cacheDir); $cacheurls = array(); foreach($filedirs as $filename){ if(!is_file($filename)){ continue; } $cacheUrl=getUrlFromCacheFile($filename); foreach($clearUrls as $clearUrl){ $clearUrl=str_replace($accessSite, $proxySite,$clearUrl); $pos=strpos($cacheUrl,$clearUrl); // echo "$cacheUrl,$clearUrl,$pos
"; //比较http://www.b.com/a/b.jpg和http://www.b.com/a if($pos===0){ $cacheurls[]=$cacheUrl; break; } } } if(count($cacheurls) > 0){ $accessSite=$_POST["accessSite"]; $proxySite=$proxySites[$accessSite]; $output.="
执行结果 \n\n"; foreach($cacheurls as $url2){ $url=trim($url2); $output.="------------------------$url start-----------------------------\n"; $pos = strpos($url, $accessSite); if(purge($proxyIp,$proxyPort,$url)==0){ $result[$url2]=0; }else{ $result[$url2]=1; } $output.="------------------------$url end -----------------------------\n"; } $output.="\n"; }else{ foreach($clearUrls as $u){ $result[$u]=-1; } } } ?>
刷新squid
URL结果\n"; foreach($result as $url=>$isOk){ switch($isOk){ case 0://成功 $r="
成功"; break; case 1://成功 $r="
失败"; break; case -1://跳过 $r="
跳过"; break; } if($$proxySite){ $url=str_replace($proxySite, $accessSite, $url); } echo "$url$r\n"; } echo "\n"; } ?>
选择站点:
/>
输入一组URL(一个一行):
刷新目录(一个一行):
测试

2e11db0a65d0202e7628e80b520b2d4ca9d86ef6

转载地址:http://yuzgl.baihongyu.com/

你可能感兴趣的文章
最近在准备开发进销存管理系统
查看>>
TCP/IP协议
查看>>
【C#】Entity Framework 增删改查和事务操作
查看>>
原创:谨以此文怀念曾经的妹妹
查看>>
作为平台的Windows PowerShell(二)
查看>>
Linux find example
查看>>
jquery之超简单的div显示和隐藏特效demo
查看>>
1、开发自定义组件简要
查看>>
使用Ksoap2调用Web Service加入SoapHeader
查看>>
[Linux] 如何禁止使用口令只允许使用密钥建立 SSH 连接
查看>>
悟透JavaScript
查看>>
MySQL批量更新死锁案例分析--转载
查看>>
sql over的作用及用法
查看>>
Android 字体设置
查看>>
用JSmooth制作java jar文件的可运行exe文件教程【图文】
查看>>
全局钩子具体解释
查看>>
ML 02、监督学习
查看>>
兄弟郊游问题
查看>>
UltraEdit打开中文乱码
查看>>
Linux输出重定向
查看>>