鱿鱼没有caching

我正在尝试将Squidconfiguration为caching服务器。 我有一个局域网,networking服务器(apache)是192.168.122.11 squid是192.168.122.21 ,我的客户端是192.168.122.22 。 问题是,当我看到Squid的访问日志时,我看到的只是TCP_MISS消息。 看来Squid根本就没有caching。 我检查了caching目录具有所有适当的权限。 还有什么可以在这里出错? 这是我的鱿鱼configuration:

 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输出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 

在你的configuration中你错过了这几行:

 acl myhosts src 192.168.0.0/255.255.0.0 (your internal network/netmask) http_access allow myhosts 

EDIT1:

你的web服务器不是你的cache_peer。 请从configuration文件中删除此行。 Squid为高速caching之间的互操作性另一种types的协议(ICP),这是Apache不知道。

根据我的经验,Squid拒绝caching内容的三个最常见的原因是:

  • caching目录权限,你已经照顾到了。 好:)
  • http_access ,但这不是你的情况,因为你在access.log中看到了TCP_MISS
  • refresh_pattern指令

refresh_pattern指令可以控制Squid如何将对象视为新鲜或过时,特别是与浏览器发出请求的方式以及哪些caching控制HTTP头被交换有关。

您在configuration中使用的refresh_pattern行是Squid的默认行。 不过,我在2周前在Ubuntu上安装了Squid,并且使用这些默认值,几乎没有任何caching。

Squid关于refresh_pattern的文档应该解释每一行的含义,但实际上我不明白这个文档的含义。 显然我并不孤单 🙂

我build议您添加一个或多个以下模式,并testing特定的文件/ URL,直到您满意。 例:

 refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 43200 

有了这个,你告诉Squid考虑所有的图标/图片可以caching至less1小时到最多半天。 您的浏览器可能会发送带有特定caching标头的HTTP请求,导致Squid无论如何回复TCP_MISS 。 要强制高速caching的答复,甚至打破客户的期望,你可以这样做:

 refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private 

更大的电影/audio/ iso文件也是如此:

 refresh_pattern -i \.(mp[34g]|swf|wav|...)$ 43200 90% 432000 

如果还有什么失败,请使用强大的锤子:)但我build议这样做:

 refresh_pattern . 3600 80% 14400 

你告诉Squid它可以caching至less1小时的一切。 但是,这几乎肯定会破坏dynamic应用程序。 如果您要caching的服务器主要由静态内容组成,请使用它。

另外,不要忘记maximum_object_size 。 默认情况下是20Mb 。 如果你试图caching的对象比这个大,那么Squid将不会caching它们。 我把它提高了10倍,达到200Mb。 因人而异。

 maximum_object_size 204800 KB 

顺便说一下,你的cache_peer行是不正确的,因为它指向Apache。 squid中的cache_peer是另一个在高速caching层次结构中更高级的squid实例,通常以前是ISPcaching服务器。 只要删除该行。

还有祝你好运 :)