実用 Apache 2.0運用・管理術

第5回 Poundで作るロードバランサとSSLラッパ

鶴長 鎮一(book@tsurunaga.jp)
2005/11/8

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 

UrlGroup ".*.(jpg|jpeg|gif)" 
BackEnd 192.168.0.10,80,1 
EndGroup 

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

 まず、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
バックエンドのサーバがダウンしている場合

3/4

Index
実用 Apache 2.0運用・管理術
 第5回 Poundで作るロードバランサとSSLラッパ
  Page 1
 リバースプロキシとロードバランサ
  Page 2
 Squidリバースプロキシによるキャッシング
  リバースプロキシとは
  Squidのインストール
  Squidの設定
  Squidの起動とリバースプロキシの動作確認
  Page 3
 Poundによる負荷分散とSSLラッパ
  Poundとは
  Poundのインストール
  単純なリバースプロキシの設定
  ロードバランサの設定
  SSLラッパの設定
  Poundの起動と動作確認
  Page 4
 LVSを使った本格的なクラスタサーバの利用
  Linux Virtual Server
  そのほかの冗長/負荷分散構成

連載 実用 Apache 2.0運用・管理術


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH