apxsでapacheにモジュールを追加する
ここでは、apache のモジュールの追加方法を説明します。
モジュール本体をコンパイルして今のapacheに追加する手順です。
apacheの拡張モジュールをビルドして、インストールしてくれる、apxsという便利なコマンドを使用します。
apxsコマンドは、apacheをインストールした際に、標準でついています。
mod_soというモジュールがapacheに組み込まれていないと、モジュールの追加はできません。
apache2.2.3での説明です。
Last Update : 2006年08月22日
apxsでapacheにモジュールを追加するの手順
1. mod_so の確認
apacheにmod_soが組み込まれているかを確認します。
サーバにログインし、以下のコマンドを試します。
# /usr/local/apache2/bin/httpd -l
で、「mod_so.c」 が表示される事を確認。
もしくは、
# /usr/local/apache2/bin/httpd -M
で、「so_module (static)」 が表示される事を確認する。
memo
上記のものがなければ、モジュールは追加できません。
mod_so というモジュールが、DSO(Dynamic Shared Object - 実行時に、モジュールをロード、アンロードする形式)をサポートしているからです。
また、mod_so は、apache コンパイル時にしか組み込む事ができません。
なければ、初めからapache を、./configure の時に、「--enable-so」 の引数をつけて再コンパイルする必要があります。
このコマンドは、apache にどんなモジュールが組み込まれているか確認できるコマンドです。
ちなみに「-l」の「 l 」は小文字のエル( L )のことです。「 i 」の大文字ではありません。 また、apache 2.2 より「-M」という引数が追加されていて、
- 「 -l 」では、静的(DSOじゃない)に組み込まれたモジュールだけのリストを表示します。
- 「 -M 」では、静的+動的(DSO)に組み込まれたモジュールのリストを表示します。
こんな感じに表示されます。
# /usr/local/apache2/bin/httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_userdir.c
mod_alias.c
mod_so.c ← mod_so.c がある事を確認する。
# /usr/local/apache2/bin/httpd -M
Loaded Modules:
core_module (static)
authn_file_module (static)
authn_default_module (static)
userdir_module (static)
alias_module (static)
so_module (static) ← so_module がある事を確認する。
php4_module (shared)
上記の確認がとれたら次へ進みます。
2. ソースの用意。(試しに、「 rewrite_module 」を追加)
ここでは、試しに、「 rewrite_module 」を追加してみます。
「 rewrite_module 」のソースファイルは、「 mod_rewrite.c 」です。
以下の様なディレクトリを作り( apacheに元々入ってるモジュールならソースを展開したディレクトリでやった方がベストかも。コンパイルに必要なファイル全部あるだろうし。)、
そこに「 mod_rewrite.c 」を置きます。
# mkdir /usr/local/apache2/3rdparty
「 mod_rewrite.c 」は、ダウンロードした apache のファイル群のどこかにあると思います。
# find /usr/local/src/httpd-2.2.3/modules/ -name "*rewrite*" /usr/local/src/httpd-2.2.3/modules/arch/netware/mod_rewrite.def /usr/local/src/httpd-2.2.3/modules/mappers/mod_rewrite.c /usr/local/src/httpd-2.2.3/modules/mappers/mod_rewrite.dsp /usr/local/src/httpd-2.2.3/modules/mappers/mod_rewrite.h /usr/local/src/httpd-2.2.3/modules/mappers/mod_rewrite.exp /usr/local/src/httpd-2.2.3/modules/mappers/NWGNUrewrite
↑ お!けっこういろいろある!
rewrite.c の他に、いろいろファイルがありますが、 rewrite.h というヘッダファイルと呼ばれるファイルはたぶん必要なので、 これも一緒にディレクトリへコピーします。
# cp -p /usr/local/src/httpd-2.2.3/modules/mappers/mod_rewrite.c \ /usr/local/apache2/3rdparty/ # cp -p /usr/local/src/httpd-2.2.3/modules/mappers/mod_rewrite.h \ /usr/local/apache2/3rdparty/
↑ cp -p /usr/loca~から~~cal/apache2/3rdparty/までは1行です。
# cd /usr/local/apache2/3rdparty/ # ls mod_rewrite.c mod_rewrite.h
これでソースファイルの用意ができました。
memo
他のモジュールの場合。
apache の場合、xxx という名前のモジュールには、mod_xxx.c という名前でソースが用意されています。(たぶん)
仮に、abc というモジュールを追加したい場合は、
「mod_abc.c」というソースをapache のファイル群から探しましょう。
後は以下の手順でapache に組み込めます。
memo
どのファイルがビルドに必要なのか?。
上記の例では、mod_rewrite.c というファイル以外にも、 いつくかの「なんとか rewrite.なんとか」というファイルが見つかってしまいました。
どのファイルが必要なのでしょうか?
疑問に思った場合は、mod_xxx.c のファイルがどのファイルをインクルードしているか
調べてみましょう。
- 調べ方 - grep コマンドで調べてみる。
[root@hoge ~]# grep mod_rewrite.def mod_rewrite.c
[root@hoge ~]# grep mod_rewrite.dsp mod_rewrite.c
[root@hoge ~]# grep mod_rewrite.h mod_rewrite.c
#include "mod_rewrite.h"←あ、includeされてる!とかわかる。→必要。
[root@hoge ~]# grep mod_rewrite.exp mod_rewrite.c
こんな感じ。
include されてるファイルは必要になります。
いざとなったら開いて確認。(無謀か。。)必要なファイルの探し方誰か教えて下さい。
3. ビルドとインストール
コンパイルには、apxs コマンドを使います。
apxs コマンドは、apacheの拡張モジュールを、
ビルドして、インストールしてくれる便利なコマンドです。
実際にやってみます。
# cd /usr/local/apache2/3rdparty/
3-1. ビルド!
# /usr/local/apache2/bin/apxs -c mod_rewrite.c # ls mod_rewrite.c mod_rewrite.la mod_rewrite.o mod_rewrite.h mod_rewrite.lo mod_rewrite.slo
3-2. インストール
# /usr/local/apache2/bin/apxs -i -a -n rewrite mod_rewrite.la
以上。
4. httpd.conf の編集
apache の設定ファイル httpd.conf で、mod_rewriteをロードできるように設定します。。
apxs コマンドでインストールすると勝手にhttpd.conf に設定を追加してくれていました。
# view /usr/local/apache2/conf/httpd.conf
以下の行が追加されている事を確認。
なければ追加。
LoadModule rewrite_module modules/mod_rewrite.so
5. apache 再起動とモジュールの確認
apache を再起動し、設定を反映させます。
# service apache graceful
もしくは
# /usr/local/apache2/bin/apachectl graceful
もしくは
# /usr/local/apache2/bin/apachectl restart
また、「1.」でやった方法でモジュールが追加されたかどうか確認できます。
# /usr/local/apache2/bin/httpd -M
Loaded Modules:
core_module (static)
userdir_module (static)
alias_module (static)
so_module (static)
php4_module (shared)
rewrite_module (shared) ←組み込まれた!
Syntax OK
以上でモジュールの追加は終了。
下の6では試してみてます。
6. 実際に使ってみる
httpd.conf を編集します。 以下の行を追加してみます。
RewriteEngine On RewriteRule ^/hogehoge/ http://kazmax.zpp.jp/linux/ [R]
ここでは、
http://kazmax.zpp.jp/hogehoge/を参照しようとすると、
http://kazmax.zpp.jp/linux/を見に行くように設定しています。
設定を反映させる為、apache を再起動します。
# service apache graceful
飛んだかな??