デフォルトのSquidでは、動的コンテンツのキャッシュを行わない。動的コンテンツは、“cgi-bin”または“?”とのマッチングによって判断される。Squidのこれまでのバージョンでは、この機能が“hierarchy_stoplist”および“cache deny”の設定によって有効になっていた。3.1以降のバージョンでは、この機能の有効化に「refresh_pattern (/cgi-bin/|\?) 0 0% 0」のような更新パターンが使われている。これにより、キャッシュ可能にできる動的コンテンツの提供サイトをバイパス規則で指定できるようになった。例えば、次のように更新パターンを設定すればよい。
refresh_pattern -i movies.com/.* 10080 90% 43200
refresh_pattern (/cgi-bin/|\?) 0 0% 0
この場合は、movies.comのコンテンツが“?”を含むURLで提供されていても、ほかの条件をすべて満たしていれば、このコンテンツはキャッシュされる。
古いバージョンのSquidでは、例外としたいコンテンツプロバイダーについてアクセス制御リスト(ACL)を定義し、「cache deny」規則よりも前に「cache allow」を使ってこれを免除する必要があるだろう。以下は、SquidのWikiに記されている例である。
# Let the client's favourite video site through
acl youtube dstdomain .youtube.com
cache allow youtube
# Now stop other dynamic stuff being cached
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
Squidが発するDNS要求は多く、HTTP要求ごとにDNS要求を1つ出す。サーバにDNSキャッシュサーバをインストールし、これをSquidで利用すればDNS要求を減らすことができる。その方法については、こちらが参考になるだろう。
ネットワークによっては、Microsoftのwindowsupdate.com(ほとんどすべてのWindows PCがOSのアップデートに利用している)のようなサイトが、最も帯域幅を必要とするサイトの1つになっている。残念ながら、こうしたサイトは部分的にコンテンツを提供する(HTTPステータスコード206を返す)ため、現状のSquidではキャッシュができない。クライアントマシンの管理を行っているなら、Microsoft Updateサーバを用意することでwindowsupdate用のキャッシュが扱えるようになる。Updateサーバが使えないなら、Squidの帯域幅管理手法である遅延プール(delay pool)を使って、ピーク時間帯にwindowsupdateが消費する帯域幅を制限できる。クライアント側は、それ以外の時間帯に接続を行ってアップデートを完了することになる。
次の例は、グローバル遅延プールの1つを64Kbps(8KBps)に設定している。これにより、10時から18時のピーク時間帯はwindowsupdate.comというあて先ドメインに対するトラフィックが64Kbpsに制限される。
acl winupdate dstdomain .windowsupdate.com
acl peakperiod time 10:00-16:00
delay_pools 1
delay_class 1 1
# 64 Kbit/s
delay_parameters 1 8000/8000
delay_access 1 allow winupdate peakperiod
前記のような変更を行うことで、わたしが利用しているSquidのバイトヒット率は8%から26〜37%に向上した。バイトヒット率が33%だとすれば、全トラフィックの3分の1が(より低速なインターネット上のリンクからではなく)キャッシュから得られていることになる。なお、監視およびログ解析による Squidのパフォーマンス評価には、squid3-clientやcalamarisが使える。
Solomon AsareはHTTP圧縮サービスDelXyの開発者。
Copyright © 2010 OSDN Corporation, All Rights Reserved.