Poundで作るロードバランサとSSLラッパ:実用 Apache 2.0運用・管理術(5)(3/4 ページ)
Webサーバの負荷を軽減する方法として、リバースプロキシによる代行とロードバランサによる分散が考えられる。今回は、これらによる負荷の低減方法について解説する。(編集部)
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
インストールが完了したら、/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)
(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
SSLラッパの設定
Poundサーバを前面に立てることにより、HTTPSを実装していないWebサーバでも、(見かけ上は)HTTPS通信が可能になります。
まず、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: ←パスフレーズを入力
# 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 ←メールアドレス
# cat server-key.pem >> pound.pem
以上で証明書の作成は完了です。この過程で作成した秘密鍵や証明書は、パーミッションを変更するなどして、外部に漏れないように厳重に管理する必要があります。
続いて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の起動と動作確認
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.