魷魚不記憶體
我正在嘗試將 Squid 配置為記憶體伺服器。我有一個區域網路,其中網路伺服器(apache)位於
192.168.122.11
squid 位於,192.168.122.21
而我的客戶端位於192.168.122.22
. 問題是,當我查看 Squid 的訪問日誌時,我看到的只是TCP_MISS
消息。似乎 Squid 根本沒有記憶體。我檢查了記憶體目錄是否具有所有適當的權限。這裡還有什麼問題?這是我的魷魚配置:acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.1/8 0.0.0.0/32 ::1 acl SSL_ports port 443 acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443 acl Safe_ports port 70 acl Safe_ports port 210 acl Safe_ports port 1025-65535 acl Safe_ports port 280 acl Safe_ports port 488 acl Safe_ports port 591 acl Safe_ports port 777 acl CONNECT method CONNECT http_access allow all http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access deny all http_port 3128 accel defaultsite=cona-proxy vhost cache_peer 192.168.122.11 parent 80 0 no-query originserver login=PAS name=webserver cache_dir ufs /var/spool/squid3 100 16 256 coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880 refresh_pattern . 0 20% 4320 always_direct allow all acl server_users dstdomain cona-proxy http_access allow server_users cache_peer_access webserver allow server_users cache_peer_access webserver deny all
在所有機器中,
cona-proxy
指向192.168.122.21
(在 中添加/etc/hosts
)的輸出
curl -v 192.168.122.11
* About to connect() to 192.168.122.11 (#0) * Trying 192.168.122.11... connected > GET / HTTP/1.1 > User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libculr/7.22.0 OpneSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: 192.168.122.11 > Accept: */* > < HTTP/1.1 202 OK < Date Mon, 02 Jul 2012 05:48:50 GMT < Server: Apache/2.2.22 (Ubuntu) < Last-Modified: Tue, 19 Jun 2012 23:04:25 GMT < ETag: "27389-b1-4c2db4dc2c182" < Accept_Ranges: bytes < Content-Length: 177 < Vary: Accept-Encoding < Content-Type: text/html < X-Pad: avoid browser bug < <html><body><h1>It works!</h1> <p>This is the default web page for the server.</p> <p>The web server software is running but no content has been added, yet. </p> </body></html> * Connection #0 to host 192.168.122.11 left intact * Closing connection #0
在您的配置中,您錯過了以下幾行:
acl myhosts src 192.168.0.0/255.255.0.0 (your internal network/netmask) http_access allow myhosts
編輯1:
您的 Web 伺服器不是您的 cache_peer。請從您的配置文件中刪除此行。Squid 具有記憶體之間的互操作性,另一種類型的協議 (ICP),apache 不知道。
根據我的經驗,Squid 拒絕記憶體內容的 3 個最常見原因是:
- 記憶體目錄權限,你已經處理好了。好的 :)
http_access
,但這不是您的情況,因為您在 access.log 中看到了TCP_MISS
行refresh_pattern
指令
refresh_pattern
指令控制 Squid 如何看待新鮮或陳舊的對象,特別是與瀏覽器發出請求的方式有關,以及交換哪些記憶體控制 HTTP 標頭。
refresh_pattern
您在配置中擁有的行是 Squid 的預設行。但是,我兩週前剛剛在 Ubuntu 上安裝了 Squid,並且使用這些預設設置,它幾乎沒有記憶體任何內容。Squid 關於 refresh_pattern 的文件應該解釋每一行的含義,但我實際上無法理解該文件的含義。顯然我並不孤單:)
我建議您添加以下一種或多種模式並測試特定的文件/URL,直到您滿意為止。例子:
refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 43200
有了這個,您告訴 Squid 考慮所有可記憶體至少 1 小時到最多半天的圖示/圖片。你的瀏覽器可能會發送帶有特定記憶體頭的 HTTP 請求,這會導致 Squid 回復一個
TCP_MISS
反正。要強制記憶體回复,甚至打破客戶的期望,您可以這樣做:refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private
更大的電影/音頻/iso文件也是如此:
refresh_pattern -i \.(mp[34g]|swf|wav|...)$ 43200 90% 432000
如果其他任何方法都失敗了,請使用強大的錘子 :) 但我不建議這樣做:
refresh_pattern . 3600 80% 14400
你用它告訴 Squid 它可以記憶體所有內容至少 1 小時。但是,這幾乎肯定會破壞動態應用程序。如果您嘗試記憶體的伺服器主要由靜態內容組成,請使用它。
另外,不要忘記
maximum_object_size
。預設情況下,它是20Mb。如果你試圖記憶體的對像比這個大,Squid 不會記憶體它們。我將它提高了 10 倍,達到 200Mb。YMMV。maximum_object_size 204800 KB
順便說一句,您的
cache_peer
行不正確,因為它指向 Apache。Acache_peer
in squid speak 是記憶體層次結構中更高的另一個 squid 實例,過去通常是 ISP 記憶體伺服器。只需刪除該行。還有祝你好運 :)