連載
» 2005年11月08日 00時00分 公開

実用 Apache 2.0運用・管理術(5):Poundで作るロードバランサとSSLラッパ (3/4)

[鶴長鎮一,@IT]

Poundによる負荷分散とSSLラッパ

 Squidは高機能なプロキシサーバであり、単なるリバースプロキシとして使用するのはSquidにとって力不足といえるでしょう。逆に、ロードバランサとしての機能には不十分な面があります。

Poundとは

 そこで、さらに一歩進めてPoundを使用します。Poundはもともとリバースプロキシ専用として作られているため、プログラムも大変小さく導入も簡単です。また、リバースプロキシに加えて以下の処理が可能です。

  • ロードバランシング
  • SSLラッパ
  • フェイルオーバー
  • フィルタリング
  • リクエストのリダイレクト

 SSLラッパとは、HTTPSに対応していないWebサーバに代わり、PoundがクライアントとHTTPS通信を行う機能です。Pound−Webサーバ間はHTTPで通信を行い、Pound−クライアント間ではHTTPSで通信します。

Pound配布元
http://www.apsis.ch/pound/

Poundのインストール

 Poundのビルド済みパッケージを提供しているディストリビューションはまれなため、ソースからインストールすることになります。http://www.apsis.ch/pound/からソースファイルをダウンロードし、適当なディレクトリに展開したらconfigureとmakeを実行します。インストール先は/usr/localになります。

# wget http://www.apsis.ch/pound/Pound-1.9.1.tgz
# tar xvfz Pound-1.9.1.tgz
# cd Pound-1.9.1
# ./configure --with-ssl=/usr
# make
# make install
注:configure時に、SSLのインストール先を指定すること(SSLラッパ用)。

 インストールが完了したら、/usr/local/etc/pound.cfgを編集します。例として3パターンのpound.cfgサンプルを紹介します。各パターンを組み合わせるなどの応用も可能です。

単純なリバースプロキシの設定

 Squidリバースプロキシと同じく、バックエンドにWebサーバが存在する環境でPoundをリバースプロキシとして利用してみます。ここでは、PoundサーバのIPアドレスを「10.0.0.1」、バックエンドのWebサーバを「192.168.0.10」「192.168.0.20」としています。

ListenHTTP 10.0.0.1,80 (1)
 
UrlGroup ".*.(jpg|jpeg|gif)" (2)
BackEnd 192.168.0.10,80,1 (2)
EndGroup (2)
 
UrlGroup ".*" (3)
BackEnd 192.168.0.20,80,1 (3)
EndGroup (3)
pound.cfg
(1) PoundサーバのIPアドレスとサービスポート番号を指定
(2) 指定した拡張子(jpg・jpeg・gif)は「192.168.0.10」のWebサーバを利用
(3) 指定のないファイルはすべて「192.168.0.20」のWebサーバを利用

 UrlGroup〜EndGroupは複数記述可能で、バックエンドのサーバをコンテンツ(ファイル)の種類で切り替えることができます。

 BackEndタグの書式は、以下のとおりです。

BackEnd サーバのアドレス,サービスポート,分散頻度

 「分散頻度」については、次の「ロードバランサの設定」を参照してください。

ロードバランサの設定

 1つのUrlGroup〜EndGroup中に複数のBackEndを記述することで、ロードバランサを実現できます。

 BackEndタグの末尾の分散頻度は優先順位を表し、値が大きいほどリクエストの優先度が高くなります。以下の例では、「192.168.0.30」のバックエンドサーバの優先度を高くしています。

ListenHTTP 10.0.0.1,80
 
UrlGroup ".*"
BackEnd 192.168.0.10,80,1
BackEnd 192.168.0.20,80,1
BackEnd 192.168.0.30,80,5
EndGroup
pound.cfg

SSLラッパの設定

 Poundサーバを前面に立てることにより、HTTPSを実装していないWebサーバでも、(見かけ上は)HTTPS通信が可能になります。

図3 PoundによるSSLラッパ 図3 PoundによるSSLラッパ

 まず、HTTPSに使用する証明書を作成します。この作業は/usr/local/etcで行います。

# cd /usr/local/etc
# openssl genrsa -des3 -out server-key.pem 1024
(省略)
Enter pass phrase: ←パスフレーズを入力
Verifying - Enter pass phrase: ←パスフレーズを再入力
サーバの秘密鍵を作成
# openssl rsa -in server-key.pem -out server-key.pem
(省略)
Enter pass phrase for server-key.pem: ←パスフレーズを入力
httpd起動時にパスワードを聞かれないように、秘密鍵にパスフレーズを書き込む
# openssl req -new -key server-key.pem -x509 -out pound.pem
(省略)
↓証明書に付記される属性情報を入力
Country Name (2 letter code) [GB]:JP ←国内であればJP
State or Province Name (full name) [Berkshire]:TOKYO ←都道府県名
Locality Name (eg, city) [Newbury]:CHIYODA-KU ←区市町村名
Organization Name (eg, company) [My Company Ltd]:ATMARKIT ←会社名
Organizational Unit Name (eg, section) []:Linux Square ←部署名
Common Name (eg, your name or your server's hostname) []:server_name ←サーバのFQDNなどサーバ固有の名称
Email Address []:root@example.jp ←メールアドレス
証明書の作成(必要に応じて「-days 365」として有効期限を設定する。デフォルトでは1カ月)
# cat server-key.pem >> pound.pem
パスフレーズを書き込んだ秘密鍵ファイルでPound用のサーバ証明書を完成させる

 以上で証明書の作成は完了です。この過程で作成した秘密鍵や証明書は、パーミッションを変更するなどして、外部に漏れないように厳重に管理する必要があります。

 続いてpound.cfgファイルを編集します。1行目の「ListenHTTPS」で、作成した証明書を読み込んでいます。

ListenHTTPS 10.0.0.1,443 /usr/local/etc/pound.pem
 
UrlGroup ".*"
BackEnd 192.168.0.10,80,1
EndGroup
pound.cfg

Poundの起動と動作確認

 pound.cfgファイルの編集が終わったら、Poundを起動します。起動後、Webブラウザなどで確認します。

# /usr/local/sbin/pound

 Poundのログは、デフォルトでは「/var/log/messages」に出力されます。

Sep XX XX:44:04 ホスト名 pound: starting...
起動の場合
Sep XX XX:23:15 ホスト名 pound: backend 192.168.0.10:80 connect: Connection refused
バックエンドのサーバがダウンしている場合

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。