Squid logo

Frequently Asked Questions (Japanese)


目立つ所で Japan Web Cache Workshopの宣伝を…
【訳者注】
ひとまず翻訳終了。校正中。

本文各節の見出しを、 オリジナルのFAQの対応する位置にリンクしてあります。 日本語が良くわからない場合は、見出しをクリックして英語を参照して下さい。


1 SquidやこのFAQ、その他のSquidに関する情報源

1.1 Squidとは何ですか?

Squidは、FTPやgopher、HTTPデータオブジェクトに対応した、webクライアントの ための、高性能な代理キャッシュサーバです。 これまでの古典的なキャッシュソフトとは異なり、Squidは単一の非ブロック型で、 I/O駆動によるプロセスで全てのリクエストを処理します。 Squidは、(i)メタデータ、特にまさにキャッシュされようとしているオブジェクトを RAM中に保存し、(ii)DNS検索をキャッシュし、(iii)非ブロック型DNS検索を サポートし、(iv)オブジェクトとDNS検索の両方で、失敗したリクエストに関する ネガティブキャッシュがインプリメントされています。また、SSLや、拡張性に 富んだアクセス制御や、全てのアクセスを記録することもサポートしています。 軽量なInternet Cache Protocolを使用することによって、 さらに帯域の使用を減少するために、Squidキャッシュを階層化や網状化することが できます。

Squidには、メインのサーバプログラムであるsquidと、 ドメインネームを検索するdnsserver、FTPデータを獲得するための ftpget、その他の管理とクライアントのプログラムから構成されています。 squidが起動を開始すると、設定された数のdnsserverプロセスを 生成します。そのプロセスは、それぞれが単一でブロック化されたDNS検索を行なう ことが出来ます。このことは、キャッシュがDNS検索を待つ時間の総量を減少させます。

Squidは、APRAによって支援されていたHarvestプロジェクトが起源です。 http://harvest.cs.colorado.edu/

1.2 Internet object cachingとは何ですか?

Internet object cachingとは、HTTPやFTP、gopherプロトコルで手に入れる ことが出来るようなインターネットオブジェクトを、ソースのサイトより、 要求を行なったサイトにより近いシステムに蓄積しておく仕組みです。 Webブラウザは、代理HTTPサーバとして手元のSquidキャッシュを、 バンド幅の消費だけでなく、アクセス時間の低減のために使うことができます。

1.3 なぜSquidとよばれるの?

Harris' Lament says, "All the good ones are taken."
ハリスの哀歌で、“よいものがすべて得られる。”と言っています。
【訳者注】 これは、どういう意味だろう。fortuneコマンドの出力の一つだな。)

我々は、Harvestキャッシュと、この新しいバージョンを区別する必要がありました。 Squidは、初期の開発コード名で、そのあだ名がいつまでも残っているのです。

1.4 最新版のSquidは、何ですか?

Squidは、しばしば更新されます。最新版については、 http://squid.nlanr.net/Squid/ を見て下さい。

1.5 だれがSquidについての責任を負っているの?

Squidは、インターネット社会の多数の人々の努力の成果です。 全米科学財団(NSF)によって支援されている、National Laboratory for Applied Network Researchの Duane Wessels が、コード開発を主導しています。

1.6 どこからSquidを持ってくることができますか?

Squidは、FTPで、
ftp://squid.nlanr.net/pub/.
から持ってくることが出来ます。

次のリストに挙げられた、世界中の多くのミラーサイトがあります。

http://squid.nlanr.net/Squid/mirrors.html

多くの寿司屋でも、ヤリイカを飼っています。(^^)

1.7 Squidについて、どのメーリングリストが使えますか?

一般に配布される、様々なメーリングリストのアーカイブは、 http://squid.nlanr.net/Mail-Archive/squid-users/ にあります。

【訳者注】
日本語を主に用いるメーリングリストでは、"Proxy JP ML"において Squidの話題が時々出ます。が、名前の通りProxy技術について語るのが目的で、 Squid cacheのメーリングリストというわけではありません。 参加希望は、 proxy-jp-request@is.aist-nara.ac.jpまで。

1.8 Squidについて、どのwebのページが使えますか?

Squidや、Squidに関係する様々なWebのページがあります。Squidソフトウェアに ついての情報は、 http://squid.nlanr.net/Squid/ に行けばよく、キャッシュ一般についてのさらに詳しい情報は、 http://www.nlanr.net/Cache/ に行けばあります。

【訳者注】
日本語で書かれたものについて、squidに関しては ヤリイカのおいしい料理法があり、キャッシュ一般については、 http://w3.lab.kdd.co.jp/technotes/WWW/Server/cached/cached.htmlがあります。 さらに、 Cache Now!キャンペーンの日本語訳も参考になるでしょう。

1.9 Squidについて、法律的な状態はどうなっていますか?

Squidの配布に含まれているREADMEファイルには、次のように書いてあります。
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

1.10 Squid FAQに貢献してくれた人達

次の人々が、この文章を作るのに貢献してくれました。

Jonathan Larmour <JLarmour@origin-at.co.uk>
Cord Beermann <cord@cc.fh-lippe.de>
Tony Sterrett <tony@nlanr.net>
Gerard Hynes <ghynes@compusult.nf.ca>
Duane Wessels <wessels@nlanr.net>
K Claffy <kc@nlanr.net>
Paul Southworth <pauls@locust.cic.net>

集めたものや、更新、コメントを squid-faq@nlanr.net に送って欲しい。

【訳者注】
次の人々が、このFAQを日本語に翻訳するのに貢献してくれました。
片山 健夫 (KATAYAMA, Takeo) <tkatayam@pi.titech.ac.jp>
喜瀬 浩 (KISE, Hiroshi) <kise@imicom.or.jp>
松井 健一 (MATSUI, Kenichi) <matsui.kenichi@nslab.ntt.co.jp>
さらに、次の人々が、このFAQに有用な事項を追加してくました。
飯島 昭博 (IIJIMA, Akihiro)さん <aki@noc.titech.ac.jp>
大日本インキの立川さん<yutaka@souken.dic.co.jp>

誤字、誤訳、このFAQに付け加えた方が良い事項、コメントを、 squid-faq-j@pi.titech.ac.jp に送って欲しい。なお、翻訳者は決してSquidについて 詳しいわけではないので、Squidについて質問されても答えられるわけではない。 japan.www.proxy.squid, fj.net.www.servers などのニュースグループで質問して欲しい。


2 インストール方法

2.1 Squidを手に入れるためには、どのファイルをダウンロードするの?

http://squid.nlanr.net/Squid/から、 squid-x.y.z-src.tar.gz (例えば、squid-1.1.6-src.tar.gz)という形をした、 ソースアーカイブファイルをダウンロードしなければなりません。 新しいバージョンへ更新するための、差分ファイルもあります。 それらは、 ftp://prep.ai.mit.edu/pub/gnu/などから入手できるpatchを 使うことで更新されます。 (【訳者注】 日本国内では、 ftp://ftp.cs.titech.ac.jp/GNU/が良い。)

2.2 Squidのインストールはどうすればいいの?

まず始めに、次のようにタイプして、ソースアーカイブの圧縮を解き、 展開して下さい。

% gzip -dc squid-x.y.z-src.tar.gz | tar xvf -

次に、コンフィギュアし、コンパイルし、インストールします。

% cd squid-x.y.z
% ./configure
% make all
% make install

Squidの構築には、GNU C (gcc)コンパイラを使うのが、最も良いでしょう。 最近のバージョンは、ANSI C用に変更されていて、古典的な コンパイラーでは、うまくコンパイル出来ないでしょう。 GNU C コンパイラは、 ftp://prep.ai.mit.edu/pub/gnu/にあります。 (【訳者注】 日本国内では、 ftp://ftp.cs.titech.ac.jp/GNU/が良い。) コンフィギュアは、多くのオプションを付けることが出来きます。 最も良く使うのが、標準とは異なったディレクトリにインストールするための、 --prefixです。標準で、インストールされるディレクトリは、 /usr/local/squidです。この標準を変えるためには、次のようにします。

% cd squid-x.y.z
% ./configure --prefix=/some/other/directory/squid

2.3 Squidは、どのオペレーティングシステムで使えるの?

このソフトは、大体の最近のUNIXで実行されるように設計されていて、 AIX, FreeBSD, HP-UX, IRIX, Linux, OSF/1, Solaris, SunOSで動作することが 確認されています。もし、プラットホームに特有の問題が起こったら、 squid-bugs@nlanr.netに e-mailで知らせて欲しい。

2.4 squid.confファイルとは、何をするためのファイルなの?

squid.confファイルは、squidのための設定を定めている ファイルです。設定には、HTTPやICP要求のポート番号や、防火壁越しの アクセスについて、受けたり送ったりする要求や情報、様々なタイムアウトの 情報が含まれています。

2.5 squid.confの例がありますか?

はい。make installの後に、squid.confの例が、 あなたがSquidをインストールしたディクトリの下の"etc"ディレクトリに 出来ています。 squid.confの例には、それぞれのオプションを説明するためのコメントが 含まれている。

2.6 squidを開始するにはどうするの?

設定ファイルを書き換えた後、RunCacheスクリプトによって squidを動かすことが出来ます。標準的なインストールディレクトリに インストールしたなら、それを開始するコマンドは、次の通りです。

/usr/local/squid/bin/RunCache &

2.7 Squidが実行中かどうか、どうやって確認すれば良いの?

次のようにclientプログラムを使うことが出来ます。

% client http://www.netscape.com/ > test

これ以外のコマンドラインのHTTPクライアントプログラムも存在しています。 ftp://ftp.pasteur.fr/pub/Network/url_get/にあるurl_getと、 ftp://ftp.pasteur.fr/pub/Network/echoping/にあるechopingの 2つが良く使われます。 最も重要なaccess.logcache.logなどのログファイルも 確認しなさい。

2.8 パッチはどのようにしてあてるの?

まず、patchというプログラムが必要です。ふつうは、
    cd squid-1.1.x
    patch < /tmp/fixes.patch
とすれば良いだけです。しかし時々、'src'ディレクトリから生成される パッチファイルがあります。その様な時は、
    cd squid-1.1.x/src
    patch < /tmp/fixes.patch
とします。

もし、あなたが使っているpatchプログラムが、エラーを起こしたり、 きちんと動かなかった場合は、例えば、GNU FTP siteにある、より新しいバージョンを手に入れて下さい。 (【訳者注】 日本国内では、 ftp://ftp.cs.titech.ac.jp/GNU/が良い。)


3 設定の問題

3.1 キャッシュの階層構造に加わるにはどうしたら良いの?

あなたのキャッシュを階層構造の中に置くには、parentかsiblingのノードを 特定するために、squid.conf中のcache_host指定を 使いなさい。

例えば、次のchildcache.example.comというホスト上の squid.confファイルでは、1つのparentキャッシュと、2つの siblingキャッシュからデータを獲得するようにそのキャッシュを設定します。

        #  squid.conf - On the host: childcache.example.com
        #
        #  Format is: hostname  type  http_port  udp_port
        #
        cache_host parentcache.example.com   parent  3128 3130
        cache_host childcache2.example.com   sibling 3128 3130
        cache_host childcache3.example.com   sibling 3128 3130
cache_host_domain指定では、特定のドメインに関して、特定の キャッシュをsiblingにするか、parentにするかを指定できます。
        #  squid.conf - On the host: sv.cache.nlanr.net
        #
        #  Format is: hostname  type  http_port  udp_port
        #

        cache_host electraglide.geog.unsw.edu.au parent 3128 3130
        cache_host cache1.nzgate.net.nz          parent 3128 3130
        cache_host pb.cache.nlanr.net   parent 3128 3130
        cache_host it.cache.nlanr.net   parent 3128 3130
        cache_host sd.cache.nlanr.net   parent 3128 3130
        cache_host uc.cache.nlanr.net   sibling 3128 3130
        cache_host bo.cache.nlanr.net   sibling 3128 3130
        cache_host_domain electraglide.geog.unsw.edu.au .au
        cache_host_domain cache1.nzgate.net.nz   .au .aq .fj .nz
        cache_host_domain pb.cache.nlanr.net     .uk .de .fr .no .se .it
        cache_host_domain it.cache.nlanr.net     .uk .de .fr .no .se .it
        cache_host_domain sd.cache.nlanr.net     .mx .za .mu .zm
上記の設定では、uk, de, fr, no, se, itドメインについて、 pb.cache.nlanr.netit.cache.nlanr.netが、 mx, za, mu, zmドメインについて、sd.cache.nlanr.netが、 au, aq, fj, nzドメインについて、cache1.nzgate.net.nzが キャッシュとして利用されるようになっています。

3.2 NLANRのキャッシュの階層構造に加わるにはどうしたら良いの?

現時点での、NLANRのキャッシュの階層構造への加入制御のポリシーは、 http://www.nlanr.net/Cache/joining.htmlで見ることが出来ます。

3.3 どうしてNLANRのキャッシュの階層構造に加わった方が良いの?

NLANRの階層構造は、parentかsiblingキャッシュの最初の起点を提供します。 NLANRの世界的なキャッシュシステムに加わることで、あなたのキャッシュ サービスの性能が常に向上するようになります。

【訳者注】
日本のサイトが、無闇にNLANRのキャッシュ階層に直接加わることは、決して得策では ありません。ネットワーク的な距離を考えてキャッシュ階層を 設定しましょう。ISPをまたがった相手を指定することは、無駄な通信を 増やすだけという意見もあります。
(Ref. <news:AKI.97Jan9170259@nocs3.noc.titech.ac.jp>)

3.4 私のキャッシュを、NLANRの登録サービスに登録するにはどうしたら良いの?

あなたのsquid.conf中の、次のオプションを設定することで、 登録されます。
cache_announce 24
announce_to sd.cache.nlanr.net:3131
注意:あなたのキャッシュをアナウンスすることは、 NLANRのキャッシュの階層構造に加わるのと、同じではありません。 登録をしないでNLANRのキャッシュの階層構造に加わることが出来ますし、 階層構造に加わらないで登録を行なうことも出来ます。

3.5 その他の私に近いキャッシュを見つけて、それらとparent/child/siblingの関係を結ぶには、どうしたら良いのでしょう?

あなたの近くの、その他のキャッシュを見つけるために、NLANRキャッシュの registration databaseを訪れてみると良いでしょう。 そのデータベースに登録されているキャッシュが、あなたのparent/sibling/childに なる気があるというわけではないことに気を付けなさい。 しかし、尋ねることは構わないでしょう。

【訳者注】
日本のサイトは、ネットワークトポロジーを考えた上で、 日本のパブリックなSquidのリストを参照すると良いでしょう。 しかし、自分の組織が属するISP(プロバイダ)よりも 先に位置する相手を キャッシュ階層で指定するのはよく考えてからにしましょう。 みんながこれをやり始めるとデータの再利用によって回線の効率化をねらう はずのSquidが、無駄な問い合わせを増やし、余計に回線を圧迫する という結果になります。 ISPをまたがった階層を作るよりも ISPにSquidサーバを用意して もらいそれがISP間の階層を作るようにお願いするほうが得策です。

3.6 httpdアクセラレータモードとは何ですか?

アクセラレータと代理キャッシュの理解に関して、問題を抱えている人が 時々います。その多くは、“入ってきた”のと“出ていく”データの解釈を 混同していることが原因です。私は、要求の観点から考えます。つまり出ていく 要求とは、ローカルなサイトから、広大なインターネットに対する要求です。 もちろん、応答として受けとるデータが、入ってくるデータです。 他の人の中には、“入ってきたデータとは、要求である”という 私の考えと逆の考え方をする人もいる。

アクセラレータは、出ていくデータに関する、入ってくる要求を蓄えます。 つまり、あなたが世界に向けて公表するようなものです。それは、 あなたのHTTPサーバと、内部のネットワークの負荷を取り除きます。 80番ポートもしくは、あなたが公表しているポートからサーバを移動して、 アクセラレータに置き換えます。そうすることで、アクセラレータは、 本当のHTTPサーバからHTTPデータを取ってきます。(アクセラレータのみが 本当のサーバがどこにあるかを知っていれば良いのです。)外の世界からは、 全く違いは見えません。(ただ、運の良いことに、スピードは、速くなります。)

サイトのwebサーバの負荷を取り除くこととは全く別のこととして、 アクセラレータは、外部に対する防火壁や、その他のネットワークに対する ボトルネックの役割もします。さらに、ボトルネックを越えるトラフックの減少や、 設定の単純化のために、内部のHTTPサーバと話すようにすることも出来ます。 ICPで互いに通信する2台かそれ以上のアクセラレータは、スピードや、サーバの1つが 落ちても大丈夫なように、webサービスの弾力性を増すことが出来ます。

Squidのredirectorは、1台のアクセラレータを、複数のサーバの単一の フロントエンドのように見せることが出来ます。あなたのファイルシステムの いくつかをあるサーバから、別のサーバに移動する必要があるか、または、 わかれて管理されているHTTPサーバを、論理的に単一のURL階層構造に 見せたい時には、アクセラレータで適切に対応できます。

もしあなたが、自分のところのローカルなユーザの検索の効率を向上させる ために、“世界の残りの部分”を蓄積したいだけなら、アクセラレータモードは、 不適切なものです。URLの階層構造を所有し、公表しているサイトは、 他のサイトからのアクセスを向上するために、アクセラレータを使用します。 ローカルなユーザの、他のサイトのURLへのアクセスを向上したいサイトは、 代理キャッシュをします。私達と同じように、多くのサイトは、その両方を望み、 両方を動かしているます。

SquidキャッシュとそのライバルであるHarvestキャッシュの測定値は、 CERNやその他広く用いられているキャッシュソフトより、能力が数十倍も 向上されていることを示しています。キャッシュにヒットした時の能力が 数十倍向上しているということは、キャッシュを、80番のポートで動かして、 サイトの主たるhttpdサーバとして振舞うように設定し、ミスした時は、 81番のポートで動いているサイトの本当のhttpdサーバに照会することで、 このキャッシュが、httpdのアクセラレータとして情報を提供出来ることを 示しています。

こうした設定のもとでは、webの管理者は、全ての蓄積されないURLを、81番の httpdのポートに変更する。HTMLのページや、GIFのような、蓄積可能な オブジェクトは、キャッシュサーバが参照して、問合せやcgi-binプログラムのような 蓄積されないオブジェクトは、81番ポートの本当のhttpdが参照します。 もし、あるサイトの利用の特徴に、蓄積可能なオブジェクトが多いという傾向が あるなら、この設定はそのサイトのwebの仕事量を劇的に減少することが出来ます。

httpdアクセラレータと、代理キャッシュサーバの2つのモードでは異なった 動作の傾向があるので、両方を、単一のsquidプロセスで実現しない 方が良いことに注意しなさい。 2つの別の機械で、別のキャッシュとして実行した方がより良い特性が 得られます。しかし、管理者が、CERNのように代理機能とWebサーバの 両方の機能をもつような他のサーバになれているなら、その統一性のために、 squid.confの設定ファイルの中で、httpd_accel_with_proxy の値をonにすることで、Squidは、代理機能とアクセラレータ機能の 両方をサポートします。

3.7 Squidを防火壁の内側で動かすには、どう設定したら良いの?

もしあなたが防火壁の内側にいるのなら、防火壁の外の世界に直接 接続することはできません。この場合、外と通信するには、parent キャッシュを使う必要があります。 Squidは、あなたが防火壁の内側にいるか、たった一つのparentしか持たないなら、 要求のためにICP問合せは行ないません。

squid.confinside_firewallの項目で、 あなたのインターネット・ファイアーウォールの内部のドメインのリストを 指定することが出来ます。例えば、

inside_firewall example.com

複数のドメインを指定することも出来ます:

inside_firewall example.com example.org example.net

inside_firewallの使用は、サーバ選択のアルゴリズムに 2種類の影響を与えます。そのドメインのリストに該当しないオブジェクトは、 防火壁を越えるとみなされるでしょう。そうしたことから、

特別な場合として、全ての要求を、siblingがparentを経由して取ってこさせる ために、ドメインをnoneと指定することが出来ます。

3.8 使われたことがないdnsserverプロセスがあります。squid.confの中で数を減らした方が良いでしょうか?

webのサイト名からそれらのインターネットアドレスに変換するための ルーチン(gethostbyname(3))が、ブロッキングされる(つまり、 それを呼び出すプロセスは、応答の待たなければならない)ために、 dnsserverプロセスは、squidに利用されます。 squidプロセスは一つしかないので、キャッシュを利用する人は皆、 ルーチンが呼び出されるそれぞれの時間を待たなければならない。 dnsserverのプロセスが複数ある理由は、それぞれのプロセスを ブロックでき、squid本体がブロックされないようにするためです。

あなたが必要とする、全てのアクセスを処理するのに、十分なだけの dnsserverプロセスが存在することは、とても重要です。そうでなければ、 squidは時々停止してしまうでしょう。 squidがあなたのシステムで、これまでに必要とした dnsserverの最大値を確認して、安全のために、その値に2つ加える というのは、なかなか良い経験則です。 言い替えるならば、これまでに、最大で3つのdnsserverプロセスしか 使用されていなくても、少なくとも5つのプロセスを立ち上げるべきです。 dnsserverは小さく、利用されない時は、スワップアウトされている であろうということは、覚えておきなさい。


4 ブラウザとSquidの間の通信

最近の大部分のブラウザは、代理機能をサポートしていて、Squidサーバを代理 サーバとして利用するような設定を簡単に行なうこと出来ます。 また、代理サーバを経由して取得しないようなドメインや URLパターンが列挙できたり、JavaScriptによる代理機能の自動設定が出来るような、 さらに進んだ機能を持つブラウザもあります。

4.1 Netscapeの手動設定

OptionsメニューからNetwork Preferencesを 選びます。Proxiesのページで、Manual Proxy Configurationボタンをクリックし、そして、View ボタンをクリックしなさい。あなたのSquidサーバがサポートしているプロトコル (初期設定では、HTTPとFTP, gopher)毎に、Squidサーバのホスト名かIPアドレスを 入力し、Portの項に、SquidサーバのHTTPポート番号 (初期設定では、3128)を入力します。あなたのSquidがサポートしていない プロトコルのところは、空欄のままにしておきます。

ここに、Netscape Navigatorの代理機能についての手動設定の画面の スクリーン・ショット があります。

4.2 Netscapeの自動設定

バージョン2.0以上のNetscape Navigatorは、代理機能をJavaScriptによって 設定することが出来ます。Optionsメニューから Network Preferencesを選びます。Proxiesの ページで、Automatic Proxy Configurationボタンをクリックし、 そして、ボックスに代理機能を設定するJavaScriptのURLを記入して下さい。 ボックスはとても小さいですが、書き進むにつれてスクロールしていきます。

ここに、Netscape Navigatorの代理機能についての自動設定の画面の スクリーン・ショット があります。 さらに、 http://home.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html から、Navigatorの代理機能を自動設定するためのJavaScriptに関する、 Netscapeの文章を調べることが出来ます。

以下に、Oskar Pearsonによる、自動設定のためのJavaScriptの例を載せておきます。

//We (www.is.co.za) run a central cache for our customers that they
//access through a firewall - thus if they want to connect to their intranet
//system (or anything in their domain at all) they have to connect
//directly - hence all the "fiddling" to see if they are trying to connect
//to their local domain.

//Replace each occurrence of company.com with your domain name
//and if you have some kind of intranet system, make sure
//that you put it's name in place of "internal" below.

//We also assume that your cache is called "cache.company.com", and
//that it runs on port 8080. Change it down at the bottom.

//(C) Oskar Pearson and the Internet Solution (http://www.is.co.za)

    function FindProxyForURL(url, host)
        {
            //If they have only specified a hostname, go directly.
            if (isPlainHostName(host))
                    return "DIRECT";

            //These connect directly if the machine they are trying to
            //connect to starts with "intranet" - ie http://intranet
            //Connect  directly if it is intranet.*
            //If you have another machine that you want them to
            //access directly, replace "internal*" with that
            //machine's name
            if (shExpMatch( host, "intranet*")||
                            shExpMatch(host, "internal*"))
                return "DIRECT";

            //Connect directly to our domains (NB for Important News)
            if (dnsDomainIs( host,"company.com")||
            //If you have another domain that you wish to connect to
            //directly, put it in here
                            dnsDomainIs(host,"sistercompany.com"))
                return "DIRECT";

            //So the error message "no such host" will appear through the
            //normal Netscape box - less support queries :)
            if (!isResolvable(host))
                    return "DIRECT";

            //We only cache http, ftp and gopher
            if (url.substring(0, 5) == "http:" ||
                            url.substring(0, 4) == "ftp:"||
                            url.substring(0, 7) == "gopher:")

            //Change the ":8080" to the port that your cache
            //runs on, and "cache.company.com" to the machine that
            //you run the cache on
                    return "PROXY cache.company.com:8080; DIRECT";

            //We don't cache WAIS
            if (url.substring(0, 5) == "wais:")
                    return "DIRECT";

            else
                    return "DIRECT";
        }

4.3 LynxとMosaicの設定

MosaicやLynxについては、それらのアプリケーションを開始する前に、 環境変数を設定しておくことで、代理機能が設定されます。cshやtcshを使っていると すると、次の例のようにします。

% setenv http_proxy http://mycache.example.com:3128/
% setenv gopher_proxy http://mycache.example.com:3128/
% setenv ftp_proxy http://mycache.example.com:3128/

Lynxでは、lynx.cfgファイルを編集して、代理機能を使用する設定を 行なうことも出来ます。この方法は、それぞれのユーザ毎に環境変数を 変更して廻ることなく、全てのLynxユーザに代理サーバにアクセスさせることが 出来るという利点もあります。例は、次の通りです、

        http_proxy:http://mycache.example.com:3128/
        ftp_proxy:http://mycache.example.com:3128/
        gopher_proxy:http://mycache.example.com:3128/

4.4 Microsoft Internet Explorerの設定

表示のメニューからオプションを選びます。 接続のタブをクリックします。プロキシ サーバ 経由で接続するをチェックして、設定のボタンを 押します。あなたのSquidサーバがサポートしているプロトコル (初期設定では、HTTPとFTP, gopher)毎に、Squidサーバのホスト名かIPアドレスを 入力し、ポートの項に、SquidサーバのHTTPポート番号 (初期設定では、3128)を入力します。あなたのSquidがサポートしていない プロトコルのところは、空欄のままにしておきます。

ここに、Internet Explorerで代理機能を設定する画面の スクリーン・ショットがあります。

マイクロソフトも、代理機能を自動的に設定する、Netscapeと同じような JavaScriptをサポートすることを始めました。現在のところ、Windows 3.1と Windows NT 3.51に対応した、MSIE version 3.0aだけが、この機能に対応している。 (つまり、Windows 95とNT 4.0に対応したversion 3.01 build 1225に関しては、 この機能は含まれていない。)

もしあなたが、この機能に対応したバージョンのMSIEを使用しているなら、 ViewメニューからOptionsを選びます。 次にAdvancedタブをチェックします。そして左下の隅にある、 Automatic Configurationボタンをクリックします。 表れたダイアログボックスに、JavaScriptファイルのURLを記入します。 そして変更を有効にするために、MSIEを終了して、再スタートします。 次からは、実行する度に、MSIEはJavaScriptファイルを読み込みます。

4.5 Netmanage Internet Chameleon WebSurferの設定

Netmanage WebSurferは、手動による代理機能の設定と、代理サーバ経由で 取ってこないホストやドメインについてのリストを設定する機能があります。 (この情報は、WebSurfer 5.0という現時点でのものです。) Settingsメニューから、Preferencesを 選択します。次に、Proxiesタブをクリックします。 そして、HTTPやFTP, gopherについてのUse Proxyを選択します。 それぞれのプロトコル毎に、Squidサーバのホスト名かIPアドレスを 入力し、ポートの項に、SquidサーバのHTTPポート番号 (初期設定では、3128)を入力します。あなたのSquidがサポートしていない プロトコルのところは、空欄のままにしておきます。

手順にわからないことがあれば、 スクリーン・ショット を見ると良いでしょう。

同じ設定のウィンドウに、代理サーバ経由で取ってきたくないホストや、 サーバを登録しておく、排除リストのダイアログボックスを開くボタンが あるはずです。この設定は自明でしょうが、取り敢えず スクリーン・ショット を載せておきます。

4.6 ブラウザに代理機能のための設定をすることなく、私のユーザのブラウザに、私のキャッシュを使わせるようにするには、どうしたら良いでしょう?

LinuxやSolarisでは、透過的なキャッシングという手法が使えます。 この仕組みは、オペレーティングシステムが、特定のIPパケットを、 アプリケーションに転送することで実現している。この文章では、今のところ、 Linuxにおける透過キャッシングの設定方法のみを述べています。

[Contributed by Rodney van den Oever <Rodney.van.den.Oever@tip.nl>]

警告: この方法には、いくつかの重大な欠点がある!

access.logのURLの中にホスト名が記録されなくなるでしょう。
その代わりに、生のIPアドレスが記録されます。これは、目的先のアドレスが、 getsockname(2)システムコールで決定されるためです。 その結果、parentやsiblingの効用は、もはや正確には働かなくなります。 parentやsibling自体は、IPアドレスではなく、ホスト名でURLが記録されます。 「それらのURLは、どのキャッシュにHITしないので、異なっています。 These URLs are different so no cache HIT occurs.」 つまり、透過キャッシュを用いると、キャッシュの階層構造による トラフィックの減少という利点が得られないことになります。
この方法は、HTTPプロトコルのみがサポートされ、gopherやFTPは使えません。
ブラウザが代理サーバを使うように設定されていないので、ブラウザは 21ポートでFTPプロトコルを使用し、要求されているHTTPプロトコルを 使いません。ブラウザが間違ったプロトコルを話すため、代理サーバへ 通信先を向けることが出来ません。gopherについても同じ問題が起こります。 「通常は、全ての代理要求は、クライアントからHTTP要求の形で転送されますが、 クライアントはそのリダイレクションに気付かないので、こうしたことは 決して起こらない。Normally all proxy requests are translated by the client into the HTTP protocol, but since the client isn't aware of the redirection, this never happens.」

こうした副作用を我慢できるなら、先に進み、防火壁とリダイレクションを サポートするように、あなたのカーネルを再構築しましょう。 次に、/usr/src/linux/.configの中で、重要なパラメータを書いておきます。

    #
    # Code maturity level options
    #
    CONFIG_EXPERIMENTAL=y
    #
    # Networking options
    #
    CONFIG_FIREWALL=y
    # CONFIG_NET_ALIAS is not set
    CONFIG_INET=y
    CONFIG_IP_FORWARD=y
    # CONFIG_IP_MULTICAST is not set
    CONFIG_IP_FIREWALL=y
    # CONFIG_IP_FIREWALL_VERBOSE is not set
    CONFIG_IP_MASQUERADE=y
    CONFIG_IP_TRANSPARENT_PROXY=y
    CONFIG_IP_ALWAYS_DEFRAG=y
    # CONFIG_IP_ACCT is not set
    CONFIG_IP_ROUTER=y

http://www.xos.nl/linux/ipfwadm/ へ行って、ipfwadmのソース配布を手に入れ、それをインストールします。 そして、リダイレクションの規則を設定して、ipfwadmを使用します。 私は、起動時にインターフェイスの設定を行なう/etc/rc.d/rc.inet1 (Slackware)から実行されるスクリプトに、この規則を付け加えました。 リダイレクションの設定は、その他の入力を受け付ける規則の設定より、 先に行なうべきです。通常は実行可能なフォワーディング(masquerading)が、 出来なくなっていることを、きちんと確認しなさい。

/etc/rc.d/rc.firewall:

    #!/bin/sh
    # rc.firewall   Linux kernel firewalling rules
    FW=/sbin/ipfwadm

    # Flush rules, for testing purposes
    for i in I O F # A      # If we enabled accouting too
    do
            ${FW} -$i -f
    done

    # Default policies:
    ${FW} -I -p rej         # Incoming policy: reject (quick error)
    ${FW} -O -p acc         # Output policy: accept
    ${FW} -F -p den         # Forwarding policy: deny

    # Input Rules:

    # Loopback-interface (local access, eg, to local nameserver):
    ${FW} -I -a acc -S localhost/32 -D localhost/32

    # Local Ethernet-interface:
    
    # Redirect to Squid proxy server:
    ${FW} -I -a acc -P tcp -D default/0 80 -r 80

    # Accept packets from local network:
    ${FW} -I -a acc -P all -S localnet/8 -D default/0 -W eth0

    # Only required for other types of traffic (FTP, Telnet):

    # Forward localnet with masquerading (udp and tcp, no icmp!):
    ${FW} -F -a m -P tcp -S localnet/8 -D default/0
    ${FW} -F -a m -P udp -S localnet/8 -D default/0

これで、ローカルなLANから、いかなる目的地へのトラフィックも、全てローカルの 80番ポートにリダイレクトされる。規則は、次の通りです。

    IP firewall input rules, default policy: reject
    type  prot source               destination          ports
    acc   all  127.0.0.1            127.0.0.1            n/a
    acc/r tcp  10.0.0.0/8           0.0.0.0/0            * -> 80 => 80
    acc   all  10.0.0.0/8           0.0.0.0/0            n/a
    acc   tcp  0.0.0.0/0            0.0.0.0/0            * -> *

次の項目は、squid.confの重要な設定です。

    http_port               80
    icp_port                3130
    httpd_accel             virtual 80
    httpd_accel_with_proxy  on

注意:virtualは、ここでのマジック・ワードです。

私は、Windows 95上でMicrosoft Internet Explorer 3.01と、プレリリース版の Netscape Communicatorの両方で、いくつかのテストを行ないました。その結果、 両方のブラウザとも、代理設定を行なわないでちゃんと動きました。

一度だけ、ローカルの80番ポートをブラウザで見ようとした時に、 squidがループに陥ったようです。しかし、次のように、 このアドレスをクライアントにとっての、排除規則に加えることで、 この問題を回避できます。

    ${FW} -I -a rej -P tcp -S localnet/8 -D dec/32 80

    IP firewall input rules, default policy: reject
    type  prot source               destination          ports
    acc   all  127.0.0.1            127.0.0.1            n/a
    rej   tcp  10.0.0.0/8           10.0.0.1             * -> 80
    acc/r tcp  10.0.0.0/8           0.0.0.0/0            * -> 80 => 80
    acc   all  10.0.0.0/8           0.0.0.0/0            n/a
    acc   tcp  0.0.0.0/0            0.0.0.0/0            * -> *

名称解決に関する注意: URLを代理サーバに渡す代わりに、ブラウザ自身がURLの名称解決をしなければ なりません。ワークステーションが、ローカルなネームサーバに問い合わせて、 外に出ていくトラフィックが最小になるよう設定されていることを確認しましょう。

防火壁か代理サーバ上で既に ネームサーバが動いているなら、ワークステーションがそのネームサーバを 使うようにしましょう。


5 運用の問題

5.1 Squidのシステムレベルの状態をどうすれば見ることが出来ますか?

Squidの配布物の中には、webブラウザでsquidの状態を見るための、 cachemgr.cgiというCGIユーティリティが含まれています。 この文章では、さらに詳しい情報を提供するために、 cachemgr.cgiの使い方に関する独立した章があります。

5.2 Squidのログファイルには何が書いてあるの?

ログはSquidの仕事量や性能に関する情報の様々なソースです。 ログは、アクセス情報を記録しているだけでなく、システムの設定エラーや、 メモリーやディスクスペースといった資源の消費量も記録してあります。 Squidのログは、次のようなフォーマットになっています。

access.log, 共通フォーマット(common format):

    Host Ident - [D/M/Yr:H:M:S TZ] "Method URL" Status Size
access.log, Squid 1.0独自フォーマット(native format):
    Time Elapsed Host Status/HTTP/Hier_Status Size Method URL
access.log, Squid 1.1独自フォーマット(native format):
    Time Elapsed Host Status/HTTP Size Method URL Ident Hier_Status/Hier_Host
hierarchy.log, Squid 1.0のみ:
    [D/M/Yr:H:M:S TZ] URL Hier_Status Hier_Host
それぞれのログのフォーマットの要素の定義は次の通りです。
Host
要求を行なったホストのIPアドレス(v1.1では、設定によりFQDNも可能)
Ident
通常は'-'。v1.1では、設定によりIdent(RFC 931)の応答。
Method
TCP要求として、GET, HEAD, POST、またはUDP要求ならICP_QUERY。
URL
要求されたオブジェクト。
Status
要求の結果。(オブジェクトがキャッシュ内にあればTCP_HIT、要求された オブジェクトが、その他のソースから取ってこられたならTCP_MISS、 UDP_HITとUDP_MISSはsiblingからの要求されたもので、同じ意味。)
HTTP
HTTP応答のコード:成功したら200、UDP応答なら000、リダイレクトなら403、サーバエラーは500など。
Size
クライアントに配送されたバイト数。
Hier_Status
sibling/parentキャッシュへの要求の結果。PARENT_MISSやSIBLING_HITなどがある。
Hier_Host
オブジェクトを取ってきたホスト。
Time
ミリ秒の分解能の1970年1月1日から始まるUnix時刻。
Elapsed
ミリ秒単位での要求されたものを配送するのにかかった時間。
【訳者注】
ログの各項目の意味や、その値の持つ意味などは、Squidの配布ファイルに 含まれているリリースノートに詳しく書いてあります。 Ver. 1.0Ver. 1.1の 「胡散臭い」日本語訳があります。

5.3 どのログファイルが安全に消すことが出来ますか?

Squidのログファイルを処理をするのに一番良い方法は、squidの プロセスに、USR1シグナルを送ることです。こうすると、現在のログファイルが クローズされ、ファイル名が変更されます。そうすると、古いログファイルは どれでも消すことが出来ます。例えば、あなたのsquid.confファイルで 設定されているsquid.pidファイルが、 /usr/local/squid/logs/squid.pidであるなら、次のようにします。

kill -USR1 `cat /usr/local/squid/logs/squid.pid`

注意:squid.conflogfile_rotate行で、必要のないログファイルを消去する 設定を行ないます。logfile_rotateに、保存しておきたい古い ログファイルの個数を設定します。logfile_rotateの値に達する たびに、もっと古いログファイルが自動的に消去されます。残しておきたい 古いログファイルの個数を、logfile_rotateに設定しておいて、 crontabで、squidSIGUSR1を送るようにしておくのが 簡単な方法です。次のcrontabの設定で、毎日、真夜中にログファイルを 更新するようになります。

0 0 * * * /bin/kill -USR1 `cat /usr/local/squid/logs/squid.pid`

絶対に消去してはいけない唯一のログファイルは、 通常cache_dirに最初に書いてあるディレクトリにある logという名前のファイルです。このファイルは、squidが スタートした時に、キャッシュを再構築するのに必要な、メタデータが含まれて います。このファイルを削除することは、あなたのキャッシュを 消してしまうことと同じです。

5.4 どうすれば私のキャッシュの中の最大のオブジェクトを見つけることが出来ますか?

sort -r -n +4 -5 access.log | awk '{print $5, $7}' | head -25
【訳者注】
もちろんこれは、native formatのときのみ有効な手法です。

5.5 Squidを再起動するときにキャッシュを消去したい

コマンドラインで-zをつけて起動するという方法があります。

別の方法ですが、こちらが簡単かもしれません。 cache_dirディレクトリの最初のlogファイルを消去するだけです。


6 Cache Manager

[本章は Jonathan Larmour <JLarmour@origin-at.co.uk> の貢献によるものです]
【訳者注】
6章は 少し古い cache manager をもとにした記述となっているようです。 最新の cache manager をお使いの方は、適宜読み替えてご利用ください。

6.1 cache managerとは何ですか?

cache manager (cachemgr.cgi) は、squidプロセスの動作 中における統計情報を表示する CGI ツールです。 cache manager はキャッシュの管理に非常に役立ち、またサーバ上にファイルを作ることなく統計情報を見ることができます。

6.2 どのように設定するのですか?

この質問に対する答えは、あなたがどのWWWサーバを使っているかによって変 わります。 以下に CERN と Apache サーバにおいて cachemgr.cgi を使用可能 にする設定方法を述べます。

[作者注: 皆さんからの、他のサーバ(例えば Netscapeなど)における cachemgr.cgi の設定方法に関する投稿をお待ちしています。おそれずにどん どん投稿して下さい。]

サーバの設定ファイルを編集した後は、おそらくWWWサーバを再起動するか、 もしくは設定ファイルを再度読み込ませるために SIGHUP を送 る必要があるでしょう。

サーバの設定が終わりましたら、WWWブラウザを使って例えば次に示すような URLにアクセスすることで、cache manager にアクセスすることができるで しょう。

http://www.example.com/Squid/cgi-bin/cachemgr.cgi

6.3 CERN httpd 3.0における Cache manager の設定方法

まずはじめに、特定のワークステーションだけが cache manager にアクセス できるよう安全策をとる必要があります。この設定は squid.conf ではなく、CERN の httpd.conf で行います。設定例は以下の通りで す。
        Protection MGR-PROT {
                 Mask    @(workstation.example.com)
        }
ここでは ワイルドカード(*)やIP addresses が使用できます。また複 数のサーバを設定するには、コンマ(,)で区切られたIP addressesのリストを 与えます。ここに挙げた他にも、まだ多くの安全策のための方法があります。ご 自分のサーバの説明書には、それらに関する記述があるはずです。

以下の設定も加える必要があります:

        Protect         /Squid/*        MGR-PROT
        Exec            /Squid/cgi-bin/*.cgi    /usr/local/squid/bin/*.cgi
この設定例はMGR-PROTにあるスクリプトを実行可能にします。

6.4 ApacheにおけるCache managerの設定方法

まずはじめに、あなたが使っている cgi-bin ディレクトリが、Apache の srm.confScriptAlias の行に書かれているかどう か確かめて下さい。例えば次のように:
ScriptAlias /Squid/cgi-bin/ /usr/local/squid/cgi-bin/
Squidの実行ファイルが全て入った /usr/local/squid/bin のような ディレクトリを、そのまま全て ScriptAliasに指定するのは良 くない方法と考えられます。

次に、特定のワークステーションだけが cache manager にアクセス できるよう安全策をとる必要があります。この設定は squid.conf ではなく、Apache の access.conf で行います。 access.confの最終行に、次のような記述を加えて下さい。

        <Location /Squid/cgi-bin/cachemgr.cgi>
        order deny,allow
        deny from all
        allow from workstation.example.com
        </Location>
上の例では1行しか設定していませんが、複数行設定することももちろん可能 です。またそれらはドメイン名やネットワークで設定可能です。

もしくは上記方法の代わりに、パスワードでcachemgr.cgiへのアク セスを制限することができます。次のような記述を access.confへ 加えて下さい。

        <Location /Squid/cgi-bin/cachemgr.cgi>
        AuthUserFile /path/to/password/file
        AuthGroupFile /dev/null
        AuthName User/Password Required
        AuthType Basic
        <Limit GET>
        require user cachemanager
        </Location>
上の例における"user"に対するパスワードの作成には htpasswd を 用います。 htpasswd の使用方法は Apache のドキュメントを参照して下さい。

6.5 Cache manager のための squid.conf における ACL の設定方法

squid.confにおける、cache manager へのアクセスに関する デフォルトの設 定は以下の通りです:
        acl manager proto cache_object
        acl localhost src 127.0.0.1/255.255.255.255
        acl all src 0.0.0.0/0.0.0.0
上記のACLを用い、次のようにアクセス制限を行います。
        http_access deny manager !localhost
        http_access allow all

上の例における最初のACLはもっとも重要な設定です。 cache manager プログ ラムはcache_objectという特殊なプロトコルを用いて、squidに 対し質問を行います。 ご自分で次のようにして、cache_objectプロトコルを試してみ て下さい:

telnet mycache.example.com 3128
GET cache_object://mycache.example.com/info HTTP/1.0

デフォルトのACLでは、cache_objectによる要求があり、かつその要求 がlocalhostからではない場合、アクセスを拒否します。その他の場合は、アク セスを許可します。

localhostからのアクセスのみを許可するということは、 cachemgr.cgi の入力フォームの最初のページで、情報を見ることの できる "cache host"を localhost のみに制限することを意 味します。 私達は以下のような設定を推奨します:

        acl manager proto cache_object
        acl localhost src 127.0.0.1/255.255.255.255
        acl example src 123.123.123.123/255.255.255.255
        acl all src 0.0.0.0/0.0.0.0
123.123.123.123はあなたのWWWサーバのIP address です。 上記のACLを使って、アクセス制限を次のように変更します:
        http_access deny manager !localhost !example
        http_access allow all

デフォルトのACLは、WWWサーバとsquidが同じ計算機上にあると仮定してい ます。cache manager プログラムから squid へのアクセスは WWWサーバから 発生するものであって、ブラウザからは発生しないことに注意して下さい。 ですから、もしcachemgr.cgiがインストールしてあるWWWサーバが、 どこか別の計算機上にあった場合は、その計算機の IP address が、上記の ACLのにあることを確認して下さい。

squid.confファイルを変更したあとは、squidSIGHUPシグナル を送ることを忘れないで下さい。

6.6 どうして パスワードや URL を入力する必要があるのですか?

cache managerの選択肢を順に見て行くと、パスワードはキャッシュサーバを シャットダウンする時にだけ必要で、URLは オブジェクトを更新(オブジェク トを元のサイトから再びとって来ること)する時にだけ必要なことがわかりま す。その他の選択肢の場合は、空欄にしたままで構いません。 cachemgr.cgiにおいて、単に情報にアクセスするよう な場合は、パスワードは必要ありません。

6.7 キャッシュサーバを遠隔操作でシャットダウンしたいのですが、パスワードって何ですか?

squid.confcachemgr_passwd の指示を見て下さい。

6.8 どうすれば cache manager の cache host を デフォルトで自分の キャッシュサーバの名前にすることができますか?

Makefile.in を編集して下さい。次の行に注目して下さい。
        HOST_OPT        = # -DCACHEMGR_HOSTNAME="getfullhostname()"
cachemgr.cgiが動いているWWWサーバが Squid が動いているサーバ と同じ場合は、#を取り除くだけで可能です。もしWWWサーバが どこか別の計算機にある場合は、次のように設定して下さい:
        HOST_OPT        = -DCACHEMGR_HOSTNAME=\"mycache.example.com\"
上記の変更を加えた場合は、cachemgr.cgi を再コンパイル・再インストール しないと変化が現れません。

6.9 Squid における TCP接続とUDP接続の違いは何ですか?

ブラウザとキャッシュは,WWWサーバないしはキャッシュからWWWのオブジェク トをとって来るのにTCP接続を使います。UDP接続は、例えばあなたのキャッシュ を他のキャッシュがsiblingあるいはparentとして使っていた場合に、他のサー バが、自分が探しているオブジェクトがあなたのキャッシュにあるかどうか見つけるために使います。このUDP接続がICP問合せです。

6.10 データの保管が1970年に終了するって言ってますけど!

心配しないで下さい。デフォルトでは(そして賢明にも)squidはオブジェク トを上書きする時にそのオブジェクトの保管を終了させます。明示的に garbage collectは行いません(別の方法であなたがそうするよう示さないかぎ り)。

6.11 Meta Data(【訳者注】 最新版ではAccounted Memory Usage)の項はそれぞれ何を表しているのですか?

StoreEntry
キャッシュにあるオブジェクトの状況を示します。
IPCacheEntry
DNSによるIP adressのキャッシュの状況を示します。
Hash link
キャッシュのhash table構造におけるリンクを示します。
URL strings
URLそれ自身が文字列として占めるデータ量を示します。 URLはStoreEntryに示されるように、 キャッシュ中にたくさんあるオブジェクトにアクセスできるよう 対応しているものです。

これらの示す情報は、基本的に cache ディレクトリ中の "log"ファイルに似ています。

PoolMemObject structures
現在メモリ中にある(すなわち現在転送中の)オブジェクトの情報
Pool for Request structures
それぞれの要求の発生状況の情報
Pool for in-memory object
オブジェクトデータ収得中のスペース

6.12 メモリ中にあるオブジェクトのための領域がとてもおおきいのです, そして小さくなりません!これはメモリのleakですか?

いいえ違います。この領域は大きくなるばかりで、小さくはなりません。この領域は、 squidが稼働していた期間中にキャッシュしたもっとも大きなオブジェ クトの大きさを反映しています。もしこれをそんなに大きくしたくない場合は、 squid.conf中のcache_memの設定値を減らして、 gopherやhttp,ftpにおけるオブジェクトの上限値を減らして下さい。

6.13 Meta Data(【訳者注】 最新版ではAccounted Memory Usage)の "Total accounted(合計量)" の項が、実際のsquidプロセスにおける量と同じにならないのです!

もしその違いが微々たるものでしたら心配しないで下さい。もし squidがその領域の示す値よりもとても大きかったらならば、メモリ のleakが疑われます。この場合は、新しいpatchがでないかどうか注意しなが ら、時折squidを再起動して下さい。

もしsquidがその領域の示す値よりもとても小さかったならば、大急 ぎで修復にかかって下さい!なにかがとても悪くなっています。おそらく squidを再起動すべきでしょう。

6.14 utilization(利用)のOtherは何を表していますか?

Other 既成カテゴリのどれにも含まれないオブジェクトを分類す る項です。
【訳者注】
最新版のcache managerでは、Other項はなくなっています。

6.15 utilization(利用)で、なぜTransfer KB/sec がいつも0なのですか?

ここでは、キャッシュが稼働している時間で平均した全体のデータ転送率の概 算を示しています。ここに示してある数字は信用できませんし、多くの場合役 に立ちません。

6.16 utilization(利用)のObject Countは何を表していますか?

現在キャッシュされている当該タイプのオブジェクトの数を示しています。

6.17 utilization(利用)のMax/Current/Min KBはそれぞれ何を表していますか?

これらは当該タイプの全てのオブジェクトの大きさの 増加傾向/現在の状態/減少傾向を示 をそれぞれ表しています。

6.18 I/Oは何を表していますか?

これらは1回のread(2) call毎にネットワークから得たバイト数 の度数分布です。上限バッファサイズを推定するのに少しは役立つでしょう。

6.19 Objectsは何を表していますか?

注意: この項は、ブラウザに対し、キャッシュにある 全てのオブジェクトのリストをダウンロードさせ、その統計を行います。その ファイルサイズはとても、とても大きいものとなります。時には そのファイルサイズが、クライアントの使用可能なメモリ量を超えてしまうこ とがあります! おそらくこの情報は必要ないものでしょう。

6.20 VM Objectsは何を表しています か?

VM Objectsは Virtual Memory にあるオブジェクトのことです。 これらのオブジェクトは現在取って来ている最中のものや、迅速なアクセスを 目的としてメモリ保持されているもの(acceleratorモードにおいて)を指します。

6.21 AVG RTTは何を意味するのですか?

平均ラウンドトリップタイム(Average Round Trip Time)のことです。ICP pingを送ってからその返事を受け取るまでの時間の平均の長さです。

6.22 IP cache contentsで, hitとnegative hitとmissの違い はなんですか?

HITはドキュメント(【訳者注】DNSの正引きデータ)がキャッシュ中にあったことを意味します。
MISSはドキュメントがキャッシュ中になかったことを意味します。
negative HITは以前にはあったが、現在はないことを意味します。

6.23 IP cache contentsはいったい何を意味しているの ですか?

HostnameはDNS正引き解決を要求されたホストの名前を示しています。

Flagsの項のアルファベットの意味は以下の通りです:

C
キャッシュされています。
N
以前キャッシュされていました。
P
現在キャッシュの処理中です。
D
要求が処理が行われ、応答を待っている状態です。
L
parentかsiblingであるためロックされている項目です。
TTL の項は "生存時間(Time To Live)"を示しています(すなわ ちキャッシュしている長さのことです)。(ドキュメントの有効期間が終わった 時にはnegativeになっているでしょう)

Nの項は、DNS正引きによって得られたIPアドレスの数を示して います。

残りの項は、そのホストに対してDNS正引きによって得られた全てのIPアドレ スのリストです。

6.24 cachemgr.cgiの出力から、どのようにし てメモリの利用状況を分析しますか?

cachemgr.cgiCache Informationのページを見て下 さい。例として次のような出力があったとします。
【訳者注】
最新版の cache manager の出力とは若干異なります。
        Memory usage for squid via mallinfo():
               Total space in arena:   94687 KB
               Ordinary blocks:        32019 KB 210034 blks
               Small blocks:           44364 KB 569500 blks
               Holding blocks:             0 KB   5695 blks
               Free Small blocks:       6650 KB
               Free Ordinary blocks:   11652 KB
               Total in use:           76384 KB 81%
               Total free:             18302 KB 19%

        Meta Data:
        StoreEntry                246043 x 64 bytes =  15377 KB
        IPCacheEntry              971 x   88 bytes  =     83 KB
        Hash link                 2 x   24 bytes    =      0 KB
        URL strings                                 =  11422 KB
        Pool MemObject structures 514 x  144 bytes  =     72 KB (    70 free)
        Pool for Request structur 516 x 4380 bytes  =   2207 KB (  2121 free)
        Pool for in-memory object 6200 x 4096 bytes =  24800 KB ( 22888 free)
        Pool for disk I/O         242 x 8192 bytes =   1936 KB (  1888 free)
        Miscellaneous                              =   2600 KB
        total Accounted                            =  58499 KB

まずはじめに、mallinfo()が、ホスト"arena"ではsquidによっ てメモリ領域の94Mが使用されている、と報告しているのに注目して下さい。こ の値はtopが示す値にとても近いです。

その94Mの内、81% (76M)がこの瞬間、実際に使用されています。残りは解放さ れているか、もしくはmalloc(3)によって予約され (pre-allocated)まだ使われていません。

その使われている76Mの内、58.5M (76%)を使用することができます。使用でき ない領域に対しては、malloc(3)によって call が行われていま す。

Meta Data(【訳者注】最新版では Accounted Memory Usageです)は使用したメモリがどこで利用されたかに関する分析 を示しています。45%はStoreEntryと URL stringsに使用されま した。その他の42%は、オブジェクトを取って来てユーザに渡すまでVMに保持 しておくためのバッファに使用されました(メモリに保管されるオブジェ クトのための領域のことです)。

領域のサイズはsquid.confのパラメータで設定できます。 バージョン1.0では、それらの領域は幾分こわれていました: メモリブロック を解放する代わりに、使用していないメモリページのスタックを保持していた からです。メモリに保管されるオブジェクトのための領域にお いて、使用されていないスタックのサイズはcache_memの1/2で した。disk I/Oのための領域は プログラム中で 200 と指定さ れていました。MemObjectRequestは、 FD_SETSIZEの1/8の値でした。

squid プロセスのサイズを小さくする必要がある場合は、設定ファイル中で 'http', 'ftp', 'gopher'の上限オブジェクトサイズを小さくすることを勧め ます。cache_memもあなたの要求にあった適切な大きさに小さく したいことでしょう。しかし cache_memを小さくしすぎると、 高負荷時にはいくつかのオブジェクトに対して収得やキャッシュが行われない でしょう。より新しいバージョンのSquidでは、空きメモリ領域をなくすため に memory_pools off と設定することが可能です。

6.25 fqdncacheとは何ですか、そしてこれはipcacheとど う違うのですか?

IPCacheはホスト名からIPアドレス(数字)への対応データを持っています。 FQDNCacheはその逆です。

【訳者注】
IPCacheはDNS正引きのデータを持ち、FQDNCacheはDNS逆引きのデータを持つということです。

例:

==============================================================================

IP Cache Contents:
 Hostname                      Flags lstref    TTL  N [IP-Number]
 gorn.cc.fh-lippe.de               C       0  21581 1 193.16.112.73
 lagrange.uni-paderborn.de         C       6  21594 1 131.234.128.245
 www.altavista.digital.com         C      10  21299 4 204.123.2.75  204.74.103.37    204.123.2.66    204.123.2.69
 2/ftp.symantec.com                DL   1583 -772855 0  

Flags:	C --> Cached
	D --> Dispatched
	N --> Negative Cached
	L --> Locked
lstref:	Time since last use
   TTL:	Time-To-Live until information expires
     N:	Count of addresses

==============================================================================

FQDN Cache Contents:

 IP-Number                    Flags TTL(?) N Hostname] 
 130.149.17.15                    C -45570 1 andele.cs.tu-berlin.de
 194.77.122.18                    C -58133 1 komet.teuto.de
 206.155.117.51                   N -73747 0

 Flags:	C --> Cached
	D --> Dispatched
	N --> Negative Cached
	L --> Locked
   TTL:	Time-To-Live until information expires
     N:	Count of names

7 困ったときには

7.1 "Proxy Access Denied"と出るのですが?

もし、squidがhttpd-acceleratorモードで起動されているのでしたら、通常のHTTP要求はHTTPサーバに転送されます。 ですが、proxy要求の場合はこれと異なります。 もしあなたがproxy-HTTP要求もキャッシュしたいのでしたら、以下のようにして機能を有効にしてください。

http_accel_with_proxy on

そうでなければ、ALCの設定ミスでしょう。 access.logsquid.confが手掛りになるので調べてみてください。

7.2 local_domainが機能しません。

Squidがローカル・サーバのオブジェクトもキャッシュしています。

local_domain命令は、ローカルのオブジェクトをキャッシュさせないための命令ではありません。 ローカルのオブジェクトを取るときにsibling cacheに問い合わせをさせないための命令です。 もし、キャッシュをさせたくなければ、cache_stoplisthttp_stop命令(バージョンによります)を使用してください。

7.3 キャッシュがsiblingでオブジェクトを検索しようとすると、Connection Refusedが出ます。しかし、siblingはオブジェクトを私のキャッシュに送ったつもりのようです。

もしHTTPポート番号が間違ってしてICPポートは正しい場合、あなたはICP問い合わせを正しく送信します。 そうするとICP replyを受け取ったキャッシュは設定が正しいと判断します。 しかし、あなたのsquid.confファイルでHTTPポートを正しく設定しないかぎり、大きなオブジェクトでは失敗します。 もし、あなたのsiblingがhttp_portを変更したのなら、このような問題が出てくるでしょう。

7.4 ファイル記述子を使いきってしまいます。

もし、Too many open filesというエラー・メッセージをみたら、ほぼファイル記述子を使いきっています。 これは、たぶん、Squidが、ファイル記述子制限の厳しいOS上で動いているために起こります。 この制限は、カーネルの中かOSの設定ツールで変更できるはずです。 ファイル記述子を使いきってしまう原因は2つあります。 まず、1プロセスあたりのファイル記述子制限にかかった場合。 もう1つは、全体のプロセスをあわせたファイル記述子数がシステムの制限にかかった場合です。

Linuxの場合はここを参照してください。 linux-tweak.html

Solarisの場合、/etc/systemに以下の内容を追加して、1プロセスあたりのファイル記述子の最大数を増やしてください。

set rlim_fd_max = 4096
set rlim_fd_cur = 1024

また、include/config.h#define SQUID_FD_SETSIZErlim_fd_maxで指定した値まで自由に設定ができます。 4096を越えると、カーネルがおかしくなるかもしれません。

Solarisのselect(2)は1024ファイル記述子しか扱うことができません。 もしもっと必要ならば、src/Makefileを編集して、$(USE_POLL_OPT)を有効し、squidを再コンパイルしてください。

FreeBSDの場合(Torsten Sturm <torsten.sturm@axis.de>氏による)

ファイル記述子の最大値を調べるにはどうすればよいのでしょうか?
sysctl -aを実行して、kern.maxfilesperprocの値をみてください。
この値を増やすのはどうやればいいのですか?How do I increase them?
sysctl -w kern.maxfiles=XXXX
sysctl -w kern.maxfilesperproc=XXXX

警告:上限を変更する場合、maxfiles > maxfilesperprocとなるようにしましょう。
上限ってなんですか?
カーネル内の上限については考えなくてもかまいません。 すべてのデータ構造は動的に割り当てられます。 例として、無制限のメタ現象(メタ天才?)を考えてみましょう(【訳者注】よくわかりません)。

多くのBSDからの流れを持つシステム(SunOS, 4.4BSD, OpenBSD, FreeBSD, NetBSD, BSD/OS, 386BSD, Ultrix)では、"brute force"法を使ってカーネル内のこの値を増やすことができます(カーネルの再構築が必要です)。

どうやって、ファイル記述子の最大値を調べることができますか?
pstat -Tを実行して、filesの値をみてください。 この値は、current/maximumの典型的なな値を示しています。
これらの値を簡単に増やすにはどうしたらいいのでしょうか?
一つの方法として、カーネル設定ファイルのmaxusersの値を増やして、カーネルを再構築する方法があります。 この方法は速くて簡単なのですが、これによって、増えてほしくない値を含めて、いろいろな値にまで影響をおよぼします。
もっときちんとした方法はありますか?
ほかの方法としては、カーネル構築用のparam.cファイルを探し、maxusersとオープンできるファイル数の最大値との関係を調べて変更することです。
ここで、参考のためにいくつかの例を示します。
SunOS
/usr/kvm/sys/conf.common/param.cの次の式に従って変更してください。
int nfile = 16 * (NPROC + 16 + MAXUSERS) / 10 + 64;
NPROCは以下のように定義されています。
#define NPROC (10 + 16 * MAXUSERS)
FreeBSD (2.1.6カーネル以降)
SunOSと同じように、/usr/src/sys/conf/param.cmaxusersmaxfilesmaxfilesperprocを以下の式に従って変更してください。
int maxfiles = NPROC*2;
int maxfilesperproc = NPROC*2;
NPROCは以下のように定義されています。
#define NPROC (20 + 16 * MAXUSERS)
プロセスあたりの制限は、直接カーネル設定ファイルの次の命令でも変更できます。 options OPEN_MAX=128
BSD/OS (2.1カーネル以降)
/usr/src/sys/conf/param.cを編集して、maxfilesを次の式で計算して調整します。
int maxfiles = 3 * (NPROC + MAXUSERS) + 80;
NPROCは次の行で定義されています。
#define NPROC (20 + 16 * MAXUSERS)
プロセスあたりの制限を変えるには、カーネル設定ファイルのOPEN_MAXを設定する必要があります。
注意: ファイル記述子を増やすためにカーネルの再構築や再設定を行なったあと、Squidを再コンパイルする必要があります。 Squidのconfigureスクリプトは使用できるファイル記述子の数を調べて記録しているため、気をつけてconfigureスクリプトの再実行をする必要があります。 例えば、
    cd squid-1.1.x
    make realclean
    ./configure --prefix=/usr/local/squid
    make
のようにします。

7.5 私のSquidが定期的に死んでしまいます。ログにはmalloc(3)がメモリを確保できなかったと文句をいっているのをみつけました。でも、私のシステムはたくさんのRAMを積んでいるんです!

ファイル記述子の最大値に加えて、多くのシステムでは、root権限でない1プロセスが使用できるメモリ量に制限があります。 BSD/OSではかなり制限がきついので、増加させたいと思うでしょう。 カーネル設定ファイルを編集して、以下の行を変更(または追加してください)。
options         DFLDSIZ=67108864        # 64 meg default max data size (was 16)
options         MAXDSIZ=134217728       # 128 meg max data size (was 64)
この方法は、カーネルの再構築と再起動が必要です。

Digital UNIXでデータ・サイズを増加させるには、/etc/sysconfigtabを編集して、以下の行を加えてください。

proc:
        per-proc-data-size=1073741824
または、cshを使用して、limitコマンドを以下のように使ってください。
zpoprp.zpo.dec.com> limit datasize 1024M

/etc/sysconfigtabを編集した場合は再起動が必要ですが、limitコマンドの場合はその必要はありません。

7.6 オブジェクトの削除に関する奇妙な記録は何なのでしょうか?

例:
97/01/23 22:31:10| Removed 1 of 9 objects from bucket 3913
97/01/23 22:33:10| Removed 1 of 5 objects from bucket 4315
97/01/23 22:35:40| Removed 1 of 14 objects from bucket 6391
この記録は正常です。Squidcache_swap_highに到達したことを表示できていません。

cachemgr.cgiによるキャッシュ情報ページの、次のような行を調べてください。

       Storage LRU Expiration Age:     364.01 days
この時間使用されなかったオブジェクトは、定期的なメンテナンス作業中に削除されます。 configファイルのreference_ageによって、LRU Expiration Ageを設定することができます。

7.7 どうしてLinuxでcache_effective_usernobodyに設定できないのですか?

何人かのユーザから、Linuxではcache_effective_usernobodyを設定しようとしてもうまくいかず、サーバが
FATAL: Don't run Squid as root, set 'cache_effective_user'!
というメッセージを出した、という報告をもらっています。 しかし、cache_effective_usernobody以外のどんな値を設定してもうまくいくことがわかっています。 解決方法の1つは、Squidのためのユーザ・アカウントを作成して、それをcache_effective_userに設定することです。

ほかの方法としては、nobodyアカウントのUIDを65535から65534に変更することで解決できます。


8 Squidの動作について

8.1 cachable objectsって何ですか?

Internet Objectには、ファイル、ドキュメント、そして、インターネットのサービスであるFTP、HTTP、gopherなどの(クライアントからの)要求に対する(サーバの)回答です。 クライアントがCaching Proxyに対してInternet Objectを要求すると、Proxyサーバーは(URLで指定されたホスト、parentキャッシュ、siblingキャッシュのいずれかから)オブジェクトを取ってきて、クライアントに渡します。

8.2 ICPプロトコルって何ですか?

ICPはsquidキャッシュ間で通信をするために使われているプロトコルです。 ICPプロトコルは、“the Internet Cache Protocol,version 2 draft”という文書で定義されています。 以下のところで読むことができます。 http://www.nlanr.net/Cache/ICP/ICP-id.txt
【訳者注】
Squid-1.1.6の配布物中に含まれている、 ICPドラフトの日本語訳もあります。
ICPv2は RFC2186 、その応用については RFC2187になりました。 RFC2186の日本語訳も作りました。

ICPは第1に、キャッシュ階層で目的のオブジェクトがsiblingキャッシュのどこにあるのかを示すものです。 もし、squidキャッシュが要求されたドキュメントを持っていなければ、squidはICP要求をsiblingに送ります。 そして、siblingは“HIT”または“MISS”というICP応答を返します。 キャッシュはその応答によって、どのsiblingキャッシュからオブジェクトを受け取ることができるか判断します。

ICPは1回のTCP接続でオブジェクトを複数転送することもできます。 ICPは現在UDPの上で実装されています。 Squidの現在のバージョンでは、マルチキャストを利用したIPCもサポートしています。

8.3 dnsserverって何ですか?

dnsserverとは、ドメイン名からIPアドレスを引くためにsquidが生成したプロセスです。 gethostbyname(3)関数は、DNS要求が完全に終了するまで停止してしまう関数ですので、このような仕組みが必要になります。

Squidは常にnon-blocking I/Oができなればならないため、DNS検索はメインのプロセスから切り離して実装される必要があります。 dnsserverはDNS検索をキャッシュしません。 DNS検索のキャッシュは、squidプロセス内で行なわれています。

8.4 ftpgetは何をするプログラムですか?

ftpgetプログラムはFTPサーバから目的のファイルを転送するためのFTPクライアントです。 FTPプロトコルは複雑なため、実装を簡単にするためにメインのsquidとは別のプロセスにしています。

8.5 FTP PUTが動きません

squidを介したFTP putは動かないようです。 この機能が動くために修正中または作成中という話はありませんか?

今のところそのような話はありません。 ftpputプログラムが必要になると思います。

8.6 キャッシュ階層って何ですか? parents(親)やsiblings(兄弟姉妹)って?

キャッシュ階層とは、概念的な親子関係や兄弟姉妹関係を持つproxyサーバの集まりです。 そして、Internet gatewaysに近い(バックボーンに近い)キャッシュが、バックボーンから遠いキャッシュのためにparentsとして働きます。 親キャッシュは、子キャッシュの“miss”を解決します。 いいかえると、あるキャッシュから親キャッシュに対してオブジェクトを要求したときに、親キャッシュがそのオブジェクトを持っていなかった場合、親キャッシュはオブジェクトを取ってきて、それを子キャッシュに送ります。 階層的にオブジェクトを格納することで、バックボーンの帯域幅の有効利用ができ、インターネット上の、組織外への情報提供サーバの負荷を減らすができます。 また、親キャッシュはよりよいキャッシュを構築することで、子キャッシュの“ヒット”率を増やすことができます。

親子関係に加えて、Squidはsibling(兄弟姉妹)もサポートします。 これは、階層で同じレベルにあるキャッシュ同士で、キャッシュ・サーバの負荷を分散する機能を提供します。 階層でのそれぞれのキャッシュは、オブジェクトを本物がある場所から取ってくるか、parentやsiblingキャッシュから取ってくるかを、簡単な解決プロトコルによって各自で決めています。 キャッシュは、sibling関係にある別のキャッシュから問い合わせが来たときに、そのオブジェクトを持っていなくても、そのオブジェクトを取ってくることはしません。

8.7 Squidキャッシュの決定アルゴリズムはどのようになっていますか?

  1. ICP問い合わせを、すべての適切なsiblingに送る
  2. 指定した時間(初期値は2秒)の間、すべての回答を待つ
  3. 最初にHITと回答したキャッシュからオブジェクトをもらう
    または、
  4. MISSと回答したparentうち、(重みづけによって)1番となるキャッシュからオブジェクトをもらう
    または、
  5. オブジェクトをソースからもらう

アルゴリズムは、ファイアウォールを含めた構成の場合、やや複雑になります。

近くに1つのparentキャッシュしか存在しないときの場合、single_parent_bypass命令によってICP問い合わせを省略することができます。 (つまり、オブジェクトを取れるところが1つしかないのなら、わざわざ問い合わせすることもない、ということ)

8.8 Squidの開発者達は、現在どのような機能を盛り込む作業をしていますか?

現在いくつかキャッシュに関して議論をしています。 これには、parentに対する自動負荷分散と、(手動と自動の両方による)parentの決定、経路決定、マルチキャストによるキャッシュ間通信、キャッシュしなくともよいURLのよりよい判別法、があります。

現在のto-doリストは http://squid.nlanr.net/Squid/Devel/todo.html にあります。

開発に加わってみたい方は、まず http://squid.nlanr.net/Squid/Devel/ の情報をみてみましょう。

8.9 Internet traffic workloadsについて、もっと教えてください

workloadsは、クライアント単独、またはクライアントの集まりがシステムにかける負荷の特徴をみつけらるようにするものです。 workloadsの性質を理解することは、システムの許容量を管理するうえで重要なことです。 Internet traffic workloadsに興味があるのでしたら、 http://www.nlanr.net/NA/から始めるとよいでしょう。

8.10 NLANRキャッシュ・システムを利用する場合の利点と欠点は何でしょうか?

NLANR root cachesはNSF supercomputer centers (SCCs)にあります。 そしてそこはNSFの高速バックボーンサービスによって(vBNS)相互接続しています。 そのため、NLANR root cache同士のキャッシュ間通信はインターネットを経由することはありません。

階層的キャッシングの利点(つまり、ネットワークの帯域幅の使用度の減少、アクセスの遅延、resiliencyの向上)は価格になってきます。 階層の上位のキャッシュは、自分の子孫のキャッシュミスのめんどうをみる必要があります。 もし、(階層構造の)葉のキャッシュのヒット率が50%としたら、すべての葉の半分の参照は、直接オブジェクトのソースを参照せずに、第2レベルのキャッシュを通して解決されます。 もし、この第2レベルのキャッシュがほとんどの文書を持っていれば、まだ常に良好です。 しかし、高いレベルのキャッシュがあまり文書を持っていなければ、負荷が限界を越え、アクセス頻度がむしろ増加するでしょう。


This transration is originated by
$Id: footer,v 1.3 1997/03/13 16:19:52 wessels Exp $