本文共 5365 字,大约阅读时间需要 17 分钟。
我公司的一个客户在国外访问测试网站比较麻烦,因此我在一台机器上安装了一个nginx,并且使用nginx的proxy_cache模块做缓存服务器,由于由于修改比较多,每次使用ngx_cache_purge清除cache只能清除几个url,没有很好的办法去清除某个目录的缓存。我研究了nginx的缓存文件格式,发现可以从中提取出url出来,如下图所示,url是以"KEY:"开头以0x0A结尾
我写了一个程序能够实现
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"; } ?>
转载地址:http://yuzgl.baihongyu.com/