13.5. リバースプロキシとしての設定

13.5.1. リバースプロキシの基本設定

Squid には、リバースプロキシと呼ばれる Web サーバーを補強する動作モードが存在します。通常の代理アクセスは、外部 Web サーバーへの接続および、オブジェクトのキャッシュといったクライアントのための機能と言えますが、リバースプロキシは Web サーバーを補強するための機能と言えます。

リバースプロキシで動作する Squid は、クライアントからのリクエストを Web サーバーに代わって受けとります。もし、リクエストされたオブジェクトがキャッシュされており、そのオブジェクトが更新されていないものであればキャッシュ内のオブジェクトをクライアントに返します。リクエストされたオブジェクトのキャッシュが存在しない、もしくは更新されていれば本来の Web サーバーにリクエストを送り、オブジェクトを取得した後にクライアントへ返します。

つまり、リバースプロキシで動作する Squid は、Web サーバーのフロントエンドでサーバーのためにオブジャクトをキャッシュし、代理アクセスを行います。Web サーバーから見れば、繰り返しリクエストのあるオブジェクトは Squid が代わりに返してくれるので、Web サーバーの負荷を軽減することができます。例えば、CGI などのキャッシュ不可能なオブジェクトを含む場合には、Web サーバーは CGI の処理に専念できるメリットがあります。よって、リバースプロキシの本来の目的からすると、リバースプロキシとして動作させる Squid と Web サーバーは同じコンピュータで動作させるよりも、別々のコンピュータで動作させるほうが望ましいと言えます。

以下は、リバースプロキシの機能を有効にした場合の設定例です。リバースプロキシを使用するには、以下のタグを設定する必要があります。

http_port 192.168.0.1:80 accel defaultsite=192.168.0.3
cache_peer 192.168.0.3 parent 80 0 no-query originserver

http_port 192.168.0.1:80 accel defaultsite=192.168.0.3

この例では、プロキシサーバーがクライアントからのリクエストを待ち受ける IP アドレスとポート番号を 192.168.0.1 :80 として指定しています。リバースプロキシとして動作させる場合は、実際の Web サーバーの代わりに Squid がリクエストを受け取りますので、通常は 80 番ポートを指定します。options には、accel を指定し、defaultsite= には メインの Web サーバー(例では 192.168.0.3)を指定します。Web サーバーで名前ベースのバーチャルホストを設定している場合には、更に vhost オプションを追加します。その他の options については、squid.conf ファイル内のコメントおよび 項13.3.1 を参照してください。

cache_peer 192.168.1.3 parent 80 0 no-query originserver

Web サーバーと Squid がやりとりをするための設定です。この例では、Squid は、192.168.0.3 の Web サーバーの 80 番ポートにリクエストを送ります。その他の options については、squid.conf ファイル内のコメントおよび 項13.3.1 を参照してください。

Squid が複数の Web サーバーへ(例は 192.168.0.3 と 192.168.0.4)処理を割り振る場合の設定は以下のようになります。

http_port 192.168.0.1:80 accel defaultsite=192.168.0.3
cache_peer 192.168.0.3 parent 80 0 no-query originserver round-robin
cache_peer 192.168.0.4 parent 80 0 no-query originserver round-robin

その他、多くの設定例が Squid の Web サイトで公開されていますので参照してください。

13.5.2. SSL リバースプロキシの設定

セキュリティを考慮して、クライアントとプロキシサーバー間で SSL を使用する場合のリバースプロキシの設定について解説します。

以下は、SSL リバースプロキシの機能を有効にした場合の設定例です。以下の例のように https_port の設定を追加する必要があります。

http_port 192.168.0.1:80 accel defaultsite=192.168.0.3
https_port 192.168.0.1:443 accel cert=certificate.pem key=key.pem defaultsite=192.168.0.3 protocol=http
cache_peer 192.168.0.3 parent 80 0 no-query originserver

https_port 192.168.0.1:443 accel cert=certificate.pem key=key.pem defaultsite=192.168.0.3 protocol=http

この例では、プロキシサーバーがクライアントからの https リクエストを待ち受ける IP アドレスとポート番号を 192.168.0.1 :443 として指定しています。options には、accel を指定し、defaultsite= には メインの Web サーバー(例では 192.168.0.3)を指定する点は、http_port と同様です。cert= には、サーバー証明書のパス名を、key= には、秘密鍵のパス名を指定します。https_port のデフォルトのプロトコルは https なので、Web サーバーと プロキシサーバー間では http を使用する場合には、protocol= の指定が必要になります。その他の options については、squid.conf ファイル内のコメントを参照してください。

ティップ

中間証明書を使用する場合には、cat コマンドなどを使用して、サーバー証明書と結合し 1 つのファイルとして cert= にパスを指定します。このとき、結合する順序は、上からサーバー証明書 -> 中間証明書の順にしなければなりません。

# cat サーバー証明書 中間証明書 > certificate.pem