日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

编程方式刷新Squid缓存服务器的五种方法

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程方式刷新Squid缓存服务器的五种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網站進行內容更新是常有的事情,當被緩存的資源更新時,前端Squid 緩存服務器內容也必須要相應的更新,否則用戶就可能會看到過期的數據。當沒有程序支持時就需要每次登錄到服務器上執行刷新操作,在服務器數量小的的時候這種方式還可行,如果服務器數量上了一定的規模,這就是一種非常笨重的處理方式,以下分別介紹通過編程方式實現刷新 Squid 的三種方法:

?

1.? refresh_pattern 用于配置Squid 的刷新策略,當 Squid 沒有配置 ignonre-reload 來忽略客戶端no-cache 和 reload 頭的時候。

ignore-reload - ignores a client no-cache or reload header. Doing this VIOLATES the HTTP standard. Enabling this feature could make you liable for problems which it causes. (ignore-reload, 忽略客戶端 no-cache 或 reload 頭,這是違反 HTTP 標準的做法,允許此特性可能導致相關問題 . )

?

在這種情況下可以通過模擬客戶端向服務器發送no-cache 頭( ctrl + f5 就完成此功能)來實現刷新操作。發送的請求頭如下:

?

2.? 通過PURGE 頭刷新緩存,這需要 Suqid 配置 ACL 以允許 PURGE 請求頭,實例如下:

acl AdminBoxes src 127.0.0.1 172.16.0.1 192.168.0.1

acl Purge method PURGE

?

http_access allow AdminBoxes Purge

http_access deny Purge


?

打開配置之后可以使用如下的請求頭來完成刪除操作

PURGE http://www.squid.org/junk HTTP/1.0
Accept: */*?

上個例子代碼中,把HEAD 修改為 PURGE 即可,如下:

?

view plaincopy to clipboardprint?
01.$head = "PURGE {$url_component['path']} HTTP/1.1/r/n";??
02.$head .= "Accept: */*/r/n";??
03.$head .= "Host: {$url_component['host']}/r/n";??
04.$head .= "Cache-Control: no-cache/r/n";??
05.$head .= "/r/n";?
$head = "PURGE {$url_component['path']} HTTP/1.1/r/n";
$head .= "Accept: */*/r/n";
$head .= "Host: {$url_component['host']}/r/n";
$head .= "Cache-Control: no-cache/r/n";
$head .= "/r/n";
?

?

3.? 通過使用多播HTCP 包來完成 Squid 清理,這是 MediaWiki 目前正在使用的方法,當wiki 更新時用于更新全球的 Squid 緩存服務器,實現原理為:發送 PURGE 請求到特定的多播組,所有 Squid 服務器通過訂閱該多播組信息完成刪除操作,這種實現方式非常高效,避免了 Squid 服務器處理響應和建立 TCP 連接的開銷。參考資料: Multicast HTCP purging??

?

發送no-cache 頭的方式在很多情況下不適用,因為大多數站長都會配置 ignore-reload 來阻止 no-cache 和 reload 頭以提高 Squid 的命中率;通過適當的權限控制 PURGE 清理將是一種非常簡單可行的方式,考慮到安全問題我們可以僅允許特定的主機進行 PURGE 清理操作,對第 1 , 2 種方式 進行簡單的變通就可以用于管理較大規模數量的前端緩存服務器 - 我們可以在被允許的主機上提供一個專門的后臺刷新隊列,這個刷新隊列在接收到刷新操作時就多線程的向前端服務器發送刪除指令,這樣就達到了同步刷新的效果。第3種方式沒有進行過嘗試,因為需要安裝相應的補丁,并進行配置,操作成本相對較高,在服務器數量特別巨大的情況下這無疑是一種非常高效的實現方式。

4? 批量清除Squid緩存的小工具
很實用的一個清除squid緩存的小工具:
http://www.wa.apana.org.au/~dean/squidpurge/

wget http://www.wa.apana.org.au/~dean/sources/purge-20040201-src.tar.gz
tar zxvf purge-20040201-src.tar.gz
cd purge
make
[root@cache purge]# ./purge -help
### Use at your own risk! No guarantees whatsoever. You were warned. ###

$Id: purge.cc,v 1.17 2000/09/21 10:59:53 cached Exp $
Usage: purge [-a] [-c cf] [-d l] [-(f|F) fn | -(e|E) re] [-p h[:p]]
[-P #] [-s] [-v] [-C dir [-H]] [-n]

-a display a little rotating thingy to indicate that I am alive (tty only).
-c c squid.conf location, default "/usr/local/squid/etc/squid.conf".
-C dir base directory for content extraction (copy-out mode).
-d l debug level, an or of different debug options.
-e re single regular expression per -e instance (use quotes!).
-E re single case sensitive regular expression like -e.
-f fn name of textfile containing one regular expression per line.
-F fn name of textfile like -f containing case sensitive REs.
-H prepend HTTP reply header to destination files in copy-out mode.
-n do not fork() when using more than one cache_dir.
-p h:p cache runs on host h and optional port p, default is localhost:3128.
-P # if 0, just print matches; otherwise or the following purge modes:
0x01 really send PURGE to the cache.
0x02 remove all caches files reported as 404 (not found).
0x04 remove all weird (inaccessible or too small) cache files.
0 and 1 are recommended - slow rebuild your cache with other modes.
-s show all options after option parsing, but before really starting.
-v show more information about the file, e.g. MD5, timestamps and flags.

1.清除URL中包含jackbillow.com的所有緩存
./purge -p 127.0.0.1:80 -P 1 -se 'jackbillow.com'

2.清除 URL 以“.mp3”結尾的緩存文件,例如:http://www.dzend.com/abc/test.mp3
./purge -p 127.0.0.1:80 -P 1 -se '/.mp3$'

5?

批量刪除squid緩存腳本

Squidweb緩存加速軟件目前已經 是新浪、搜狐、網易等各大網站廣泛應用。Squid會在設置的緩存目錄下建立多個目錄,每一個目錄下又建立多個目錄,然后才在最里層的目錄中存放緩存文件(object)。squid會根據用戶請求網頁的URL進行哈希,生成緩存文件,存放在某一個目錄中。squid啟動之后,將在內存中建立一個哈希表,記錄硬盤中緩存文件配置的情形。

對于類似http://you.video.sina.com.cn/index.html之類的網頁,squid只會生成一個緩存文件??梢杂胹quid附帶的squidclient工具清除:

squidclient -m PURGE -p 80 http://you.video.sina.com.cn/index.html

注意:

Squid接受一種客戶請求方式,用于刪除cache對象。PURGE方式并非官方HTTP請求方式之一。它與DELETE不同,對后者, squid將其轉發到原始服務器。PURGE請求要求squid刪除在uri里提交的目標。squid返回200(OK)或404(Not Found)。

PURGE方式某種程度上有點危險,因為它刪除了cache目標。除非你定義了相應的ACL,否則squid禁止PURGE方式。正常的,你僅僅允許來自本機和少數可信任主機的PURGE請求。配置看起來如下:

acl AdminBoxes src 127.0.0.1 172.16.0.1 192.168.0.1

acl Purge method PURGE

http_access allow AdminBoxes Purge

http_access deny Purge

而對于帶有參數的網頁,例如新浪播客的Flash播放器http: //vhead.blog.sina.com.cn/player/outer_player.swf?auto=0&vid=4469852& uid=1278987704,因“?”后面的參數不同,導致URL也不同,squid會生成多個緩存文件,哈希分散存放在不同的目錄。如果修改了這個 outer_player.swf文件,要更新squid緩存就要去清除不同目錄下及內存中的很多個緩存文件,十分麻煩,于是我編寫了一個Linux下的 shell腳本,去完成這件麻煩的事:

  腳本文件名:clear_squid_cache.sh

  #!/bin/sh

  squidcache_path="/data1/squid/var/cache"

  squidclient_path="/usr/local/squid/bin/squidclient"

  grep -a -r $1 $squidcache_path/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}' >cache_list.txt

  for url in `cat cache_list.txt`; do

  $squidclient_path -m PURGE -p 80 $url

  done

注意: 請賦予clear_squid_cache.sh可執行權限(命令:chmod +x ./clear_squid_cache.sh)。請確保腳本所在目錄可寫。

  設置:

  squidcache_path= 表示squid緩存目錄的路徑

  squidclient_path= 表示squidclient程序所在的路徑,默認為squid安裝目錄下的bin/squidclient

用法:

  1、清除所有Flash緩存(擴展名.swf):

  ./clear_squid_cache.sh swf

  2、清除URL中包含sina.com.cn的所有緩存:

  ./clear_squid_cache.sh sina.com.cn

  3、清除文件名為zhangyan.jpg的所有緩存:

  ./clear_squid_cache.sh zhangyan.jpg

效率:

經測試,在DELL 2950上清除26000個緩存文件用時2分鐘左右。平均每秒可清除緩存文件177個。

?

總結

以上是生活随笔為你收集整理的编程方式刷新Squid缓存服务器的五种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。