kazmax - Linux で自宅サーバー

apxsでapacheにモジュールを追加する

ここでは、apache のモジュールの追加方法を説明します。

モジュール本体をコンパイルして今のapacheに追加する手順です。
apacheの拡張モジュールをビルドして、インストールしてくれる、apxsという便利なコマンドを使用します。

apxsコマンドは、apacheをインストールした際に、標準でついています。

mod_soというモジュールがapacheに組み込まれていないと、モジュールの追加はできません。
apache2.2.3での説明です。

Last Update : 2006年08月22日

apxsでapacheにモジュールを追加するの手順

  1. mod_so の確認
  2. ソースの用意とコンパイル。(試しに、「 rewrite_module 」を追加)
  3. ビルドとインストール
  4. httpd.conf の編集
  5. 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

飛んだかな??

Apache 関連記事