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