批量清除nginx快取的方法

2021-09-21 16:32:56 字數 4205 閱讀 6697

我公司的乙個客戶在國外訪問測試**比較麻煩,因此我在一台機器上安裝了乙個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

**如下

<?php  

/* 日期:2012-07-21 14:43:00

功能:按照多個目錄或者多個url的方式,清除nginx的cache,或者檢視nginx cache 快取

要求:nginx + ngx_cache_purge

*///**伺服器的ip

$proxyip

="127.0.0.1"

;  //**伺服器端口

$proxyport

=80;  

//**伺服器的快取目錄

$cachedir

="/opt/proxy_cache_dir/"

;  $proxysites

=array

(  //使用者訪問的網域名稱 => 被**的實際**的網域名稱,若是都是80的話就是一樣即可

""=>

"");  

//輸出檔案

$output=""

;      

$result

=array

();  

$filedirs

= array

();  

//只檢視快取檔案,不清除 if(

$_post

["view"

])  

}  scan_dir(

$cachedir

);  

$cacheurls

= array

();  

foreach

($filedirs

as$filename

)  $cacheurl

=geturlfromcachefile(

$filename

);  if(

count

($clearurls

))  

foreach

($clearurls

as$clearurl

)  }  

}  }

else

//清除一批url if(

$_post

["urls"

])else  }

else

$output

.="------------------------$url end -----------------------------\n"

;  }  

$output

.="\n"

;  }

else

//清除某個目錄下的所有檔案 if(

$_post

["dirs"

])  

}  scan_dir(

$cachedir

);  

$cacheurls

= array

();  

foreach

($filedirs

as$filename

)  $cacheurl

=geturlfromcachefile(

$filename

);  

foreach

($clearurls

as$clearurl

)  }  

}  if

(count

($cacheurls

) > 0)

else

$output

.="------------------------$url end -----------------------------\n"

;  }  

$output

.="\n"

;  }

else

}  }  ?>  

"">  

"content-type"

content=

"text/html; charset=utf-8"

/>  

重新整理squid

<?php  if(

$result

)  if

($$proxysite

)  echo

"$url

$r\n"

;  }  

echo

"\n"

;  }  

?>  

<?php  

echo

$output

;  ?>  

<?php  

//清除某個url

function

purge(

$proxyip

,$proxyport

,$url

)    if(

empty

empty

($proxyport

))   

$output

.="正在從伺服器"

.$proxyip

."更新"

.$url

."\n"

;  $errstr

= ''

;  $errno

= ''

;  $fp

= fsockopen

($proxyip

, $proxyport

, $errno

, $errstr

, 2);  

if(!

$fp)  

else

$output

.=$out

;  if

($out

=="\r\n"

)  }  

fclose (

$fp);  

$output

.="***********response end **************\n"

;          

flush

();  if(

$isok

)else

}  }  //遞迴掃瞄cache目錄下所有檔案路徑

function

scan_dir(

$dir

)   

closedir

($dh

);  

}  return

$filedirs

;  }  

//從cache檔案中提取真實的url

function

geturlfromcachefile(

$filename

)  //讀取檔案的前1k位元組

$contents

= fread

($handle

, 1024);  

fclose(

$handle

);  if(

strlen

($contents

)<=

$headerlen

)  //截掉檔案頭

$contents

=substr

($contents

,$headerlen

);  

//cache檔案的分隔符為\a

$pos

=strpos

($contents

, chr

(0x0a));  if(

$pos

===false)  

//獲取分隔符前的字串

測試

Shell指令碼批量清除Nginx快取

前言 隨著整個網際網路的發展,產生了無數大大小小的 隨之而來使用者對 ui和速度體驗也在日益加強,對企業或者個人來說,贏得使用者體驗也就意味著贏得先機。那今天我們在這裡針對 速度這方面來一起交流,提高 速度對於運維工程師 程式設計師來說變得至關重要。運維工程師首先得在日常 運維中發現影響 速度的各種...

Shell指令碼批量清除Nginx快取

前言 隨著整個網際網路的發展,產生了無數大大小小的 隨之而來使用者對 ui和速度體驗也在日益加強,對企業或者個人來說,贏得程式設計客棧使用者體驗也就意味著贏得先機。那今天我們在這裡針對 速度這方面來一起交流,提高 速度對於運維工程師 程式設計師來說變得至關重要。運維工程師首先得在日常 運維中發現影響...

清除快取資料的方法

我們在做專案的時候,常常需要乙個清除資料快取的功能,下面的一些 是我平常用的清除快取的方法 import uiimageview webcache.h import sdimagecache.h 包含標頭檔案 借助於sdwebimage庫 建立乙個button uibutton delbutton ...