プロキシキャッシュとして、Squidは複数の方法で使用されます。ファイアウォールと組み合わせると、セキュリティに役立ちます。複数のプロキシを一緒に使用できます。また、キャッシュされるオブジェクトのタイプ、およびその期間も決定できます。
Squidをファイアウォールと併用し、プロキシキャッシュを使用して社内ネットワークを外部から保護することもできます。ファイアウォールは、Squidを除く外部サービスに対する全クライアントのアクセスを拒否します。すべてのWeb接続は、プロキシを使用して確立する必要があります。この設定では、SquidはWebアクセスを完全に制御します。
ファイアウォール設定にDMZが含まれている場合、プロキシはこのゾーン内で動作しなければなりません。「透過的な」プロキシの実装方法については、セクション 29.5, 透過型プロキシの設定を参照してください。この場合、プロキシに関する情報が必要とされないので、クライアントの設定が簡略化されます。
複数のSquidインスタンスを設定して、これらの間でオブジェクトを交換できます。これにより、システム全体の負荷を削減し、ローカルネットワーク内の既存のオブジェクトの検出率を高めることができます。また、キャッシュから兄弟キャッシュまたは親キャッシュにオブジェクト要求を転送できるように、キャッシュ階層を設定することも可能です。これにより、ローカルネットワーク内の他のキャッシュから、またはソースから直接、オブジェクトを取得できるようになります。
ネットワークトラフィック全体が増大することは望ましくないため、キャッシュ階層に適切なトポロジを選択することがきわめて重要です。大規模ネットワークの場合は、サブネットワークごとにプロキシサーバを設定して親プロキシに接続し、親プロキシはISPのプロキシキャッシュに接続すると有効です。
この通信はすべて、UDPプロトコルの最上位で実行されるICP (Internet cache protocol)により処理されます。キャッシュ間のデータ転送は、TCPベースのHTTP (hyper text transmission protocol)により処理されます。
どのサーバからオブジェクトを取得するのが最も適切であるかを検出するために、あるキャッシュからすべての兄弟プロキシにICPリクエストが送信されます。各兄弟プロキシは、オブジェクトが検出された場合はHITコード、検出されなかった場合はMISSを使用し、ICPレスポンスを介してリクエストに応答します。複数のHITレスポンスが検出された場合、プロキシサーバは、最も短時間で応答したキャッシュまたは最も近接するキャッシュなどのファクタに従ってダウンロード元のサーバを決定します。リクエストを満たすレスポンスが受信されなければ、リクエストは親キャッシュに送信されます。
ヒント: ネットワーク上の様々なキャッシュ内でオブジェクトの重複を回避するために、CARP (Cache Array Routing Protocol)やHTCP (Hypertext Cache Protocol)など、他のICPプロトコルが使用されます。ネットワーク上で維持されるオブジェクトが多くなるほど、必要なオブジェクトを検出できる可能性が高くなります。
ネットワーク上で使用可能なオブジェクトがすべてスタティックであるとは限りません。動的に生成されるCGIページ、アクセス件数カウンタ、暗号化されたSSLコンテンツドキュメントが多数存在します。この種のオブジェクトは、アクセスされるたびに変化するためキャッシュされません。
その他のオブジェクトについても、キャッシュにどのくらいの期間残しておくかという問題があります。これを決定するために、オブジェクトが取り得るさまざまな状態を定義し、キャッシュ内のすべてのオブジェクトに1つの状態を割り当てます。Webサーバとプロキシサーバは、これらのオブジェクトにLast modified
やExpires
などのヘッダおよび対応する日付を追加することで、オブジェクトの状態を検出します。その他、オブジェクトをキャッシュしないように指定するヘッダも使用されます。
ハードディスクの空き容量不足が原因で、通常、キャッシュ内のオブジェクトはLRU (Least Recently Used)などのアルゴリズムを使用して置換されます。これは、基本的には、長期間要求されていないオブジェクトがプロキシにより消去されることを意味します。