Sync A World You Want To Explore

関 信浩が2002年から書き続けるブログ。ソーシャルメディア黎明期の日本や米国の話題を、元・記者という視点と、スタートアップ企業の経営者というインサイダーの立場を駆使して、さまざまな切り口で執筆しています

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のエントリーが出来るようになるでしょう。