Squidをキャッシュサーバーとして構成しようとしています。 Webサーバー(Apache)が192.168.122.11
にあるLANがあります。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は、キャッシュ間の相互運用性のために、Apacheが知らない別のタイプのプロトコル(ICP)を備えています。
私の経験では、Squidがコンテンツのキャッシュを拒否する最も一般的な3つの理由は次のとおりです。
http_access
ですが、access.logにTCP_MISS
行が表示されているため、これはではありませんrefresh_pattern
ディレクティブrefresh_pattern
ディレクティブは、特にブラウザがリクエストを行う方法、およびどのキャッシュコントロールのHTTPヘッダーが交換されるかに関連して、Squidがオブジェクトをフレッシュまたは古いと見なす方法を制御します。
設定にあるrefresh_pattern
行はSquidのデフォルト行です。しかし、私は2週間前にUbuntuにSquidをインストールしました。これらのデフォルトでは、ほとんど何もキャッシュされません。
refresh_patternに関するSquidのドキュメント は各行の意味を説明するはずですが、実際にはそのドキュメントの意味を理解できません。 そして明らかに私は一人じゃない :)
次のパターンを1つ以上追加し、満足するまで特定のファイル/ URLをテストすることをお勧めします。例:
refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 43200
これを使用すると、すべてのアイコン/画像を少なくとも1時間から最大で半日キャッシュできると見なすようにSquidに指示します。ブラウザが特定のキャッシュヘッダーを含むHTTPリクエストを送信すると、SquidはTCP_MISS
で応答します。キャッシュされた返信をforceキャッシュするには、クライアントの期待に反する場合でも、これを行うことができます。
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
少なくとも1時間はすべてをキャッシュできるとSquidに伝えています。ただし、これはほぼ確実に動的アプリケーションを壊します。キャッシュしようとしているサーバーのほとんどが静的コンテンツで構成されている場合に使用します。
また、maximum_object_size
もお忘れなく。デフォルトでは20Mbです。キャッシュしようとしているオブジェクトがそれよりも大きい場合、Squidはそれらをキャッシュしません。私はそれを10倍にして200Mbにしました。 YMMV。
maximum_object_size 204800 KB
ところで、Apacheを指しているため、cache_peer
行は正しくありません。 Squid Speakのcache_peer
は、キャッシュ階層の上位にある別のSquidインスタンスであり、通常、昔はISPキャッシュサーバーでした。その行を削除してください。
そして成功を祈る :)