Apache にモジュールを追加する

いろいろなモジュールを組み込むことで、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 にある のパスが通っていないからコンパイルできんよ、ということ。そこで、ndbm.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 経由でコンパイラ型言語的に扱うことができるらしい。数百倍レベルで処理速度が上がるらしいので、是非入れてみたい。やっぱ、インタプリタは遅すぎなんだね。

お疲れさまでした。

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/289
СТО at 2014年3月31日 00:24

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.