モジュール版HelloWorld
Apacheのモジュールを作るときのおぼえがき。
とはいえ、生成されたmod_hello.cのコメント部分をみればわかることだけど…。
テンプレート生成
apxsコマンドでテンプレートを生成する
-g : テンプレート生成
-n 名前 : モジュール名指定
$ apxs -g -n hello
カレントディレクトリに hello という名前のディレクトリができる。
中身はmod_hello.c Makefile modules.mk .dep
ソースコード
出来たmod_hello.cを以下のように修正
#include "httpd.h" #include "http_config.h" #include "http_protocol.h" #include "ap_config.h" static int hello_handler(request_rec *r){ if(strcmp(r->handler, "hello")) return DECLINED; r->content_type = "text/html"; if(!r->header_only) ap_rputs("<h1>Hello World!</h1>", r); return OK; } static void hello_register_hooks(apr_pool_t *p){ ap_hook_handler(hello_handler, NULL, NULL, APR_HOOK_MIDDLE); } module AP_MODULE_DECLARE_DATA hello_module = {STANDARD20_MODULE_STUFF, NULL,NULL,NULL,NULL,NULL,hello_register_hooks};
コンパイル
apxsコマンドでコンパイル(makeはうまく動かなかった)
-cに加えて必要に応じて-iや-aを追加する。
-c : コンパイル
-i : mod_hello.soをmolulesディレクトリにコピー
-a : httpd.confにLoadModule行を追加
$ apxs -c -i -a mod_hello.c
httpd.confの設定
apxsコマンドの-iをしていない場合は以下を追加。
(なお、-iを使った場合もファイル末尾ではなくて、それなりの場所に挿入してくれていた)
LoadModule hello_module libexec/apache2/mod_hello.so
/etc/apache2/other/hello.confを作成し、テスト実行位置を指定
(httpd.confでInclude /etc/apache2/other/*.confとしている前提)
<Location "/test/"> SetHandler hello </Location>
テスト実行
ブラウザから、http://localhost/test/ をアクセス