1月に「mod_perl化でhttpdが不安定に」とエントリーしていたように、httpdのmod_perl化によって、MTのリビルドは高速になったのですが、いろいろ問題が発生していました。
特にこの1カ月は不安定で、(ウェブ)メールを使うことが苦痛に思えるほどになっていました。
実際にはmod_perl化で肥大化したhttpdで、静的ページをさばいているのが問題、ということは頭では分かっていたものの、実作業をするだけの気力も勇気もなかったので、もう2カ月放置してある状態でした。
さすがに先月半ばに耐えられなくなり、4万円(!)を投入して、512MBのメモリーを増設したのですが焼け石に水。
仕方がないので、今日は腹をくくって、静的ページ用のhttpdと動的ページ用のhttpdを分ける作業をしました。
やたら躊躇していた割りには、実際の作業をそれほど大変ではなかったです。
まず手元にあった「Red Hat Linux Security and Optimization」(ソフトバンク パブリッシング)を見て、ApacheのProxyPass機能を使うことにしました(同書104ページ辺り)。
で、どうせなので静的ページを扱うフロントのhttpdは、Apache2にしました(おかげでhttpd.confのちょっとした書き換えが必要になりました)。
イメージとしては
- すべてのリクエストはApache2が受ける
- アプリケーション関連のリクエスト(cgi-binなど)は、Apache2のProxyPassを使って、今まで使っていたhttpd(Apache+mod_perl)に投げる
- そのために裏で動くhttpd(Apache+mod_perl)は別のポート(8080など)で動かす
てな感じでしょうか。
ということで、まずApache2をmake。念のため./configure --enable-proxyをして、デフォルトのディレクトリにインストール(/usr/local/apache2/)。
ここでフロントのhttpdをApacheのままにしておけば、今まで使っていたhttpd.conf(私のは/etc/httpd/conf/httpd.conf)をフロント用のhttpd.confに上書きして、mod_perlやphp関連のモジュールを抜けばOKなのです。しかしApache2とApacheではhttpd.confの書式が変わっているためか、単に上書きだとエラーの嵐になってしまいました。そこで必要そうな部分を、手作業でコピー&ペーストしました。
出来上がったApache2用のhttpd.confですが、私はさらに次の修正を加える必要がありました。
- 「AddDefaultCharset ISO-8859-1」をコメントアウトする
- 「NameVirtualHost 1.2.3.4」(1.2.3.4はその後<VirtualHost 1.2.3.4>として使うIPアドレス)を加える
二つ目の修正は、VirtualHost(同じIPアドレスのサーバーでも異なるドメインで異なるコンテンツを出せる機能)を使っていなければ不要でしょう。
最後に、httpd.confに次の行を加えて、動的ページの生成をバックエンドのhttpd(Apache)に振り分けるように設定します。
ProxyPass /myapps http://127.0.0.1:8080/myapps
ここで/myappsはアプリケーションが置いてある場所(/cgi-binなど)です。なおバックエンドとのコネクションに8080番以外のポートを利用する場合には、この8080を他の数字に変更してください。
このProxyPassの行は、必要な数だけ記述します。
さて、今度はバックエンドのApacheのhttpd.confの設定です。
不可欠な作業は、
Listen 127.0.0.1:8080
Port 8080
あたりでしょう。
逆にフロントのApache2で処理してしまう、静的ページへのAliasやVirtualHostは不要なので削ってしまってもいいかもしれません(メモリーを小さくできる)。
何度か試行錯誤は必要かもしれませんが、とにかく、フロントとバックのhttpdのポートのコンフリクトがないようにすれば、あとは何とかなるでしょう。
最後は新しく加えたhttpd(Apache2)を、システムのサービスとしてちゃんと登録します。/etc/init.d/httpd2を作成し、chkconfig --level 3 http2 onとでもしておけば、ほぼOKでしょう。
この作業をした結果、MTのコンソールやウェブメールが大幅に軽快になっただけでなく、今のところ不愉快な「ページが見つかりません」のエラーはなくなりました。
メモリーを増設した後にシステムの軽量化を行ったので、効果が大きく見えるのかもしれませんが、これでしばらくは少しストレスを減らした状況でメールやBlogのエントリーが出来るようになるでしょう。