apacheのIfModuleの書き方

staticとsharedに関係なく書き方は同じなんですね。違うもんだと思い込んでました。トホホ。

  •  # モジュールのファイル名
  • # モジュール識別子

モジュール識別子が使えるのはapache2.1以上。mod_hoge.cって書き方はstaticなものだけだと思ってた。理由は、httpd -lするとmod_hoge.cっていうstaticなモジュールが出てきて、httpd -Mだとsharedなものもhoge_moduleと表示されてたから。すごいどうでも良いことだけど、前から気になってたので謎が解けて良かった。

moduleをDSOでビルド、インストール

# cd /path/to/src/foo
# apxs -a -i -c mod_foo.c

おー、簡単。"-a"を指定するとhttpd.confに自動的にLoadModuleの設定も追加される。

上記コマンドで動かない場合

apacheに元々配布されてるmod_proxy、mod_sslなどをapacheインストール後に個別でDSOとしてインストールしようとしたら失敗してしまった。

# /usr/local/apache2/bin/apachectl configtest  
httpd: Syntax error on line 19 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_proxy.so into server: /usr/local/apache2/modules/mod_proxy.so: undefined symbol: ap_proxy_lb_workers

ap_proxy_lb_workersはSRC/modules/proxy/proxy_util.cの中にあった。
それを一緒にコンパイルすれば良いらしい。

# apxs -a -i -c mod_proxy.c proxy_util.c
# apxs -a -i -c mod_proxy_ajp.c proxy_util.c ajp_utils.c ajp_header.c ajp_msg.c ajp_link.c
# apxs -a -i -c mod_proxy_balancer.c proxy_util.c
# apachectl configtest
Syntax OK

できた。