Apache-2.2

魷魚不記憶體

  • January 26, 2018

我正在嘗試將 Squid 配置為記憶體伺服器。我有一個區域網路,其中網路伺服器(apache)位於192.168.122.11squid 位於,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。A cache_peerin squid speak 是記憶體層次結構中更高的另一個 squid 實例,過去通常是 ISP 記憶體伺服器。只需刪除該行。

還有祝你好運 :)

引用自:https://serverfault.com/questions/403646