Apacheのmod_proxyモジュールを使ってWebの負荷分散を行う mod_proxyで負荷分散 (ProxyPassReverse)
概要自宅サーバ(Webサーバ)で,WikiのCGI(PyukiWiki)やら何やら動かしていると,パワー不足を感じるようになってきた. Wikiの少し凝ったページ(具体的にはこのBugTrack)を表示しようとすると, 少し待たされるという状態になってしまった. そこで,Wikiの処理については自宅LAN内にある別のマシンに任せることで, レスポンスの改善を図った.
今回の方法インターネットに公開しているのはサーバAだけだが,
![]() サーバBが高スペックなマシンなので,こいつにWikiの処理を任せることにする. インターネットから入ってきたリクエストのうち,http://www.rensa.info/wiki/* 宛のリクエストを,Apacheのmod_proxyを使ってサーバBに転送する. そして,サーバB上でWikiの重い処理を実行してレスポンス(Webページ)を生成してサーバAに返し, それをブラウザへ返すという流れになる.
別案 (参考)なお,このように別のサーバへ処理を依頼するには,今回使わなかったが他の方法も存在する. stoneなどのリピータソフトを使って,リクエストを転送することも可能である.具体的には,
という方法. しかしこの方法は,ブラウザから http://www.rensa.info:8001 へのリクエストを投げさせてしまうという欠点がある. 利用者の環境によっては,ブラウザからポート8001への接続ができない場合が十分あり得る. 特にプロキシ経由だと,接続できない可能性が高い. なので今回はこの方法は使わず,mod_proxyを使うことにした.
Apache mod_proxyの準備Apacheに,mod_proxyが入っていないことには話にならない.make前のconfigureを,--enable-proxy を付けて行えばよい.
Apacheの設定httpd.confの抜粋 - サーバA <Location /wiki> ProxyPass http://server-b/rensawiki ProxyPassReverse http://server-b/rensawiki </Location> サーバBでは,http://server-b/rensawiki/ というURLでWiki宛のリクエストを受け付けるような設定にしている.
httpd.confの抜粋 - サーバB Alias /rensawiki /var/www/wiki <Directory /var/www/wiki/> DirectoryIndex wiki.cgi Options ExecCGI AllowOverride None </Directory> サーバAから中継されてくるWiki宛のリクエストが /rensawiki で来るので, /rensawiki に対してAliasを設定してますよという程度の内容だ. 以上で,あっけなく作業終了. |