squid緩存更新
『壹』 怎麼設置squid不緩存任何網站文件或者特定的某個網站不緩存設置
因為共享VPS是通過SQUID緩存訪問的,要一段時間後才會更新它,如果你想不緩存任何文件,可以按以下方式做: 將C:\squid\etc\目錄下的squid.conf文件里的 cache_dir ufs C:\squid\var\cache 30000 16 256 改成 cache_dir ufs C:\squid\var\cache 30000 16 256 read-only 修改完後重啟一下squid服務即可不緩存網站文件。
『貳』 squid 如何緩存 視頻文件
以下這些參數告訴Squid緩存的文件系統、位置和緩存策略: cache_dir ufs /var下面就一步一步來了解Squid是如何進行控制管理的。 通過IP地址來識別用戶很,
安裝環境
操作系統: CentOS release 5.2 (Final)
Kernel: 2.6.18-92.el5PAE
軟體列表
squid-2.6.STABLE22.tar.gz
軟體存放位置
/data/software
安裝過程
#/usr/sbin/groupadd squid -g 610
#/usr/sbin/useradd -u 610 -g squid squid
#mkdir /srv/scache
#chmod +w /var/vcache
#chown -R squid.squid /srv/scache
#mkdir /var/log/squid
#chmod +w /var/log/squid
#chown -R squid.squid /var/log/squid
#cd /data/software/pkg
#tar zxvf ../squid-2.6.STABLE22.tar.gz
#cd squid-2.6.STABLE22
#./configure --prefix=/usr/local/squid
#make && make install
編輯Squid配置文件
#vi /usr/local/squid/etc/squid.conf
-------------------------華麗的分割線,以下都是配置文件內容----------------------------
#定義acl項名稱
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80
acl safeprotocol protocol HTTP
acl test dstdomain .test.com
acl CONNECT method CONNECT
#定義acl規則
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access allow safeprotocol Safe_ports test
http_access deny all
icp_access allow all
#squid監聽埠
http_port 80 accel defaultsite=59.151.32.58 vhost
always_direct allow all
#後端伺服器
cache_peer 10.10.10.8 parent 80 0 no-query originserver
hierarchy_stoplist cgi-bin ?
#內存cache大小
cache_mem 2048 MB
#內存cache中最大的object大小(超過這個值則不進入內存cache)
maximum_object_size_in_memory 8 KB
#內存cache的替換規則
memory_replacement_policy lru
#硬碟cache的替換規則
cache_replacement_policy lru
#磁碟cache目錄(文件類型 cache目錄路徑 cache目錄大小 二級目錄個數 每個二級目錄下的三級目錄個數)
cache_dir ufs /srv/scache 40000 16 256
#磁碟cache中最小的object的大小(低於這個值則不緩存)
minimum_object_size 0 KB
#磁碟cache中最大的object的大小(超過這個值則不緩存)
maximum_object_size 2048 KB
cache_swap_low 90
cache_swap_high 95
#定義日誌格式
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
#記錄相關日誌
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#日誌rotate(24則後綴從.0到.23)
logfile_rotate 24
emulate_httpd_log on
#如果你的URL裡面帶有?,這兩行一定要注銷掉
#acl QUERY urlpath_regex cgi-bin \?
#cache deny QUERY
#配置自動更新(關於後面的三個值請參考Squid配置手冊)
refresh_pattern -i \.jpg$ 60 80% 1440
refresh_pattern -i \.png$ 60 80% 1440
refresh_pattern -i \.gif$ 60 80% 1440
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95
request_header_max_size 10 KB
reply_header_max_size 10 KB
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
#相關timeout設置
forward_timeout 4 minutes
connect_timeout 3 minutes
peer_connect_timeout 30 seconds
read_timeout 15 minutes
request_timeout 1 minute
persistent_request_timeout 3 minutes
half_closed_clients off
pconn_timeout 1 minute
#cache管理員郵箱
cache_mgr [email protected]
cache_effective_user squid
cache_effective_group squid
#squid伺服器的visible_hostname,此處指定的值顯示在Squid響應的Header裡面的X-Cache項中
visible_hostname squidserver
coremp_dir /var/log/squid/cache
------------------------華麗的分割線,以上都是配置文件內容-----------------------------
初始化squid緩存目錄
#/usr/local/squid/sbin/squid -z
啟動squid
#/usr/local/squid/sbin/squid -sD
配置完成以後,最重要最重要的一點,修改Squid伺服器的hosts文件,將需要Cache的域名指向到後端的伺服器IP上
相關命令
停止squid
/usr/local/squid/sbin/squid -k shutdown
啟用新配置
/usr/local/squid/sbin/squid -k reconfig
通過crontab每小時截斷/輪循日誌
59 * * * * /usr/local/squid/sbin/squid -k rotate
查看squid運行狀況
/usr/local/squid/bin/squidclient -p 80 mgr:info
/usr/local/squid/bin/squidclient -p 80 mgr:5min
查看squid內存使用情況
/usr/local/squid/bin/squidclient -p 80 mgr:mem
查看squid磁碟使用情況
/usr/local/squid/bin/squidclient -p 80 mgr:diskd
查看squid已緩存列表(小心使用,可能會導致crash)
/usr/local/squid/bin/squidclient -p 80 mgrbjects
強制更新某個url
/usr/local/squid/bin/squidclient -p 80 -m PURGE http://img.test.com/h/a.jpg
查看squid緩存到內存cache中並返回給訪問用戶的項
#cat /var/log/squid/access.log | grep TCP_MEM_HIT
查看squid緩存到磁碟cache中並返回給訪問用戶的項
#cat /usr/local/squid/var/logs/access.log | grep TCP_HIT
查看沒被squid緩存住,直接從原始伺服器獲取並返回給訪問用戶的項
#cat /usr/local/squid/var/logs/access.log | grep TCP_MISS
『肆』 如何清空squid指定頁面的緩存
Linux系統中清除squid的緩存的方法 在運行Squid的linux或者Unix上清除代理緩存,這里用的是很粗略的方法,還有用squidclient,好的方法就是腳本,尤其當網站很多,url參數有復雜的情況下。 第一步:確定squid代理緩存的位置 復制代碼 代碼如下: ...
『伍』 squid 緩存時間設置的疑問
根據你的描述
建議你修改為
refresh_pattern -i \.jpg$ 0 0% 1800
上述設置的目的是
不設最小緩存時間,發現圖片被修改之後緩存立刻失效.
ignore-reload是指忽略客戶端的刷新請求.
『陸』 Servlet/JSP怎麼控制頁面緩存於squid中
近段時間在研究如何將Servlet/JSP中的偽動態頁面緩存到Squid中來加速Web訪問,在google上搜索"JSP在squid中的緩存"的信息,出來的信息比較少,後來差PHP,ASP的緩存相關資料及"深入體驗java Web開發內幕——核心基礎.pdf"和"Squid中文權威指南"中的相關章節,總算實現了這個目的(有需要這兩本書的兄弟可以mail我 )。基於自己的一些理解和試驗成果,記下來供以後參考。 HTML的HTTP協議頭信息中控制著頁面在幾個地方的緩存信息,包括瀏覽器端,中間緩存伺服器端(如:squid等),Web伺服器端。本文討論頭信息中帶緩存控制信息的HTML頁面(JSP/Servlet生成好出來的也是HTML頁面)在中間緩存伺服器中的緩存情況。
HTTP協議中關於緩存的信息頭關鍵字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等。
HTTP1.0中通過Pragma 控制頁面緩存,可以設置:Pragma或no-cache。網上有非常多的文章說明如何控制不讓瀏覽器或中間緩存伺服器緩存頁面,通常設置的值為no-cache,不過這個值不這么保險,通常還加上Expires置為0來達到目的。但是如我們刻意需要瀏覽器或緩存伺服器緩存住我們的頁面這個值則要設置為Pragma。
HTTP1.1中啟用Cache-Control 來控制頁面的緩存與否,這里介紹幾個常用的參數:
no-cache,瀏覽器和緩存伺服器都不應該緩存頁面信息;
public,瀏覽器和緩存伺服器都可以緩存頁面信息;
no-store,請求和響應的信息都不應該被存儲在對方的磁碟系統中;
must-revalidate,對於客戶機的每次請求,代理伺服器必須想伺服器驗證緩存是否過時;
max-age=xxx,s-max-age=xxx,替代Expires,表示應該在xxx秒後認為頁面過時,後者指示代理伺服器中緩存(通常稱為共享緩存)的頁面過期時間。(不過我試了好多次,這個選項一直沒法實現,希望有人能補充!)
通常我們不需要緩存頁面時設置該值為"no-cache,no-store,must-revalidate"(分三行代碼設置);需要緩存頁面信息時則設置該值為"public,max-age,s-max-age"。
Last-Modified只頁面的最後生成時間,GMT格式;
Expires過時期限值,GMT格式,指瀏覽器或緩存伺服器在該時間點後必須從真正的伺服器中獲取新的頁面信息;
上面兩個值在JSP中設置值為字元型的GMT格式,無法生效,設置long類型才生效;
最後來看一下JSP或Servlet中如何設置緩存控制信息的代碼:
Java代碼
//本頁面允許在瀏覽器端或緩存伺服器中緩存,時限為10秒。
java.util.Date date = new java.util.Date();
response.setDateHeader("Last-Modified",date.getTime());
response.setDateHeader("Expires",date.getTime()+10000);
response.setHeader("Cache-Control", "public");
response.setHeader("Pragma", "Pragma");
Java代碼
//不允許瀏覽器端或緩存伺服器緩存當前頁面信息。
response.setHeader( "Pragma", "no-cache" );
response.setDateHeader("Expires", 0);
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.addHeader( "Cache-Control", "must-revalidate" );
如果HTML頁面信息中包括了Expires頭信息,則其相關的緩存機制不再處理該頁面,而是安裝頁面的緩存控制要求來處理。所以做了上述工作後,Squid無需做任何配置上的修改(指Squid的refresh_pattern指令不處理這些頁面 )。
下面說一下Squid緩存一些靜態資源的一些原理,Squid通過refresh_pattern指令來控制用戶請求是否命中。 "Squid中文權威指南"文章中描述Squid的refresh_pattern指令一段文章讀起來非常的拗口,就是LM_factor比率的演算法,這個演算法的概念翻譯的比較模糊,網路上傳來傳去的,感覺都是搞不清楚,後來參考"OReilly - Squid The Definitive Guide.chm"英文原文,總算明白過來 。
英文原文應用代碼
Responses that fall between the minimum and maximum are subject to Squid's
last-modified factor (LM-factor) algorithm. For such responses, Squid calculates
the response age and the LM-factor and compares it to the percent value. The
response age is simply the amount of time passed since the origin server
generated, or last validated, the response. The resource age is the difference
between the Last-Modified and Date headers. The LM-factor is the ratio of the
response age to the resource age.
LM-factor的定義是(response age)/(the resource age).
其中response age是指HTTP頭信息中的age信息。
resource age是指HTTP頭信息中的Date值減去Last-Modified的值轉化為秒的值。
各位可以通過curl命令(Linux下自帶命令)來參看一個資源返回回來的HTTP頭詳細信息,如下面這樣:
curl -I
經過試驗,這個演算法是正確的,同時這里要提醒一下,特別是對一些HTML類型的資源,max值不要設置的太大,如果設置的太大的話,有可能修改的文檔信息需要非常長的時間才能得到更新,因為LM-factor參數值是變化的,越來越大,分母變大的結果就是比率越來越小,總是小於我們設定的比率,導致需要max來控制頁面刷新。
『柒』 如何清空squid中指定頁面的緩存
Linux系統中清除squid的緩存的方法
在運行Squid的linux或者Unix上清除代理緩存,這里用的是很粗略的方法,還有用squidclient,好的方法就是腳本,尤其當網站很多,url參數有復雜的情況下。
第一步:確定squid代理緩存的位置
復制代碼
代碼如下:
#grep cache_dir /etc/squid/squid.conf //直接抓取squid的配置文件中緩存的目錄的路徑
輸出如下,根據自己編譯安裝指定的目錄不同,結果可能不同
復制代碼
代碼如下:
#cache_dir ufs /var/spool/squid 100 16 256
第二步:清空squid代理緩存
復制代碼
代碼如下:
# squid -k shutdown //關閉squid服務</p>< p># rm -rf /var/spool/squid/ //刪除緩存目錄
重建緩存目錄
復制代碼
代碼如下:
# squid -z
輸出如下:
復制代碼
代碼如下:
2013/08/24 04:24:19| Making directories in /var/spool/squid/00</p>< p>2013/08/24 04:24:19| Making directories in /var/spool/squid/01</p>< p>2013/08/24 04:24:19| Making directories in /var/spool/squid/02</p>< p>2013/08/24 04:24:20| Making directories in /var/spool/squid/03</p>< p>2013/08/24 04:24:20| Making directories in /var/spool/squid/04</p>< p>2013/08/24 04:24:20| Making directories in /var/spool/squid/05</p>< p>2013/08/24 04:24:20| Making directories in /var/spool/squid/06</p>< p>
重啟Squid:
復制代碼
代碼如下:
#squid 或者 #service squid start
運行後輸出:
復制代碼
代碼如下:
Starting squid: [ OK ]
第三步:確認Squid在運行
復制代碼
代碼如下:
# netstat -tulpn | grep :3128 // 查看squid使用的3128埠是否在使用
你也可以查看squid的access.log或者cache.log來檢查squid的運行是否正常,命令如下:
復制代碼
代碼如下:
# tail -f /var/log/squid/access.log</p>< p># tail -f /var/log/squid/cache.log
『捌』 如何讓Squid實現動態緩存
讓動態內容也緩存?那就是強制緩存
在refresh_pattern裡面加參數即可
具體的得根據實際情況確定
有以下參數
override-expire
override-lastmod
reload-into-ims
ignore-reload
ignore-no-cache
ignore-private
ignore-auth
stale-while-revalidate=NN
ignore-stale-while-revalidate
max-stale=NN
negative-ttl=NN
『玖』 怎樣解決squid無法重建緩存的問題
事實上我也這么干過
但是奇怪的是如果我把緩存的目錄設置在 /var/spool/squid
這里的時候出來的提示就是 file exits
如果我把cache-dir 的目錄設在 /squid 里時錯誤的提示就是
FATAL: Failed to make swap directory /squid/00: (13) Permission denied
需要說明的是 cache_effctive_user 和 cache_effctive_group都是 squid
而 /var/spool/squid 和 /squid 的目錄屬性都是777 都屬於 squid.squid