いろいろなモジュールを組み込むことで、Apache の可能性が広がるっぽいことを知ったので、とりあえず入門としてモジュール追加を実行。今回は、URLを書き換えてムチャできそうな素敵なモジュール mod_rewriteを、まったりと追加してみる。
ちなみに、Apache についてあまりに知らなさすぎて、このエントリを書くのにスゲー時間をかけたのは秘密。業務で必要に迫られたわけもなく、プライベートでも全然使わないのに、なぜそんなに気合い入っているかは自分でも不明。きっと頭おかしくなったんだと思う。ううう。
以下、apache2.0系での手順。1.3系でやり方が大きく違うところだけ、別途記述します。なんでそんなに親切なのか。すごく疑心暗鬼。
で、モジュール追加の前提として、Apache で DSO が有効になっている必要がある。DSOというのは、Apache にダイナミックにモジュールを組み込む仕組みみたいなもん。make 時に組み込む静的モジュール群と対比してダイナミック。
DSO が有効かどうかは、mod_so が組み込まれているかどうかで分かる。
# /usr/local/apache/bin/httpd -l Compiled in modules: core.c ... mod_so.c
上記のように、ここで mod_so.c が出てくれば DSO が使用できる。もし DSO が有効でない場合は、--enable-shared または --enable-module=so を加えて再ビルドすればOK。サービス稼動中のモジュール追加にも柔軟に対応できる(サービス停止を回避できる)ので、DSO は有効にしておくのが良いでしょう。…って、どこかに書いてありました。
DSO が有効になっている場合は、後は apxs を使用してサクっとモジュールソースをコンパイル&インストールするだけ。思った以上に簡単。主婦の味方です。なんじゃそりゃ。
# cd /usr/local/src/httpd-2.0.56/modules/mappers # /usr/local/apache/bin/apxs -ic mod_rewrite.c
apache 1.3系の場合は、以下のような感じ。
# cd /usr/local/src/apache-1.3.34/src/modules/standard # /usr/local/apache/bin/apxs -ic mod_rewrite.c
ここで、サーバのご機嫌がななめだと、次のようなエラーを吐き捨てられる。
In file included from mod_rewrite.c:93: mod_rewrite.h:133:18: ndbm.h: そのようなファイルやディレクトリはありません apxs:Break: Command failed with rc=1
この手のエラーに遭遇するたび、サーバに「私のこと一体どう思っているの?」と、その愛を試されている気分になる。「そんなこと急に言われても…別に悪いことした覚えはないんだけど…」である。これだから女性の扱いは難しい。勢いだけで書いているけど。
このエラーは、mod_rewrite.h にある
# find / -name 'ndbm.h' -print /usr/include/db1/ndbm.h /usr/include/gdbm/ndbm.h
# /usr/local/apache/bin/apxs -ic -I /usr/include/gdbm -l gdbm mod_rewrite.c
これで、mod_rewrite モジュールのインストールは完了。/usr/local/apache/modules/ (1.3系は /usr/local/apache/libexec/)に mod_rewrite.so があるのを確認。あとは、httpd.conf で LoadModule して、優しくこねくり回して使ってあげるだけです。
ちなみに、今回は mod_rewrite モジュールを組み込んだけれども、他にも便利そうなモジュールが色々ある。例えば、mod_perl モジュールを使えば、インタプリタ型言語の perl を Apache 経由でコンパイラ型言語的に扱うことができるらしい。数百倍レベルで処理速度が上がるらしいので、是非入れてみたい。やっぱ、インタプリタは遅すぎなんだね。
お疲れさまでした。
I'll immediately grab your rss feed as I can't to find your email subscription link or newsletter service. Do you have any? Kindly permit me recognise in order that I could subscribe. Thanks.