鱿鱼不缓存


8

我正在尝试将Squid配置为缓存服务器。我有一个局域网,其中Web服务器(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

测试时,请确保测试页允许缓存。例如,不缓存SSL页面。
Mircea Vutcovici 2012年

现在,我只有Apache的默认“ It works”页面。我认为应该将其缓存起来。
Abhishek Chanda

我应该添加您的鱿鱼配置。
Christopher Perrin 2012年

添加了鱿鱼配置
Abhishek Chanda 2012年

1
在您发布的示例请求中,内容不可缓存。
symcbean 2012年

Answers:


3

在您的配置中,您错过了以下几行:

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所不知道的。


我的内部网络是192.168.0.0/255.255.255.0。当我添加这两行时,我的浏览器说proxy server is refusing connections
Abhishek Chanda 2012年

1
如果您使用的地址为192.168.122.11等,则您的网络不是192.168.0.0/255.255.255.0,而是192.168.122.0/255.255.255.0。
Jan Marek

或可能是192.168.0.0/255.255.0.0
Christopher Perrin

1
这是我的第一个建议,请参阅我的答案... :-)
Jan Marek

当然!抱歉! 我发布时已经很晚了!
Christopher Perrin

7

以我的经验,Squid拒绝缓存内容的三个最常见的原因是:

  • 缓存目录权限,您已经做好了。好:)
  • http_access,但这不是您的情况,因为您TCP_MISS在access.log 中看到行
  • 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请求,这TCP_MISS无论如何都会导致Squid进行回复。要强制执行缓存的回复,甚至破坏客户的期望,您可以执行以下操作:

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。一个cache_peer鱿鱼讲是在高速缓存架构中的另一个squid实例上涨,通常用于在过去的ISP的缓存服务器。只需删除该行。

还有祝你好运 :)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.