奥别产サーバ勉强会03
- 2. 自己绍介
id:oranie?
@oranie
?渋谷の緑色のグループ会社で、グループ内でも余り知られていないシステムでなん
か色々やる簡単なお仕事しています。
?緑色のみんながよく知っているサービスの裏側とかは全く知らないですw
- 4. 発表内容
初心者が
Apacheモジュールとはなんぞや?
をとりあえず調べてみた。
- 5. そもそも
Apacheのモジュール
(mod_rewriteやmod_authやら色々)
は一杯あるけど、
そもそもどんな動作をしているの?
- 7. Apacheの処理フェイズについて
Apache はリクエストを複数の フェイズ (phase) で処理。
典型的な静的ファイルの場合
(1) 要求された URI を実際のファイルの場所に変換する
(2) ファイルを読み出してクライアントに送信する
(3) リクエストをログに記録する
というざっくり分けて三つのフェイズがある。
※細かく分けるともっとあります。今日は割愛。
例えばmod_auth_basicによるbasic認証が掛かっている場合は、1のフェイズ
にリクエストを処理、次に認証掛かっているディレクトリなら認証処理をして
問題なければ2のフェイズに???と言った具合。
- 9. 基本処理を踏まえ、
モジュールを動作させるには?
①Cで動作させたい処理を記述したモジュールを作る。
②Apacheの適切なフェイズにモジュールで定義した
hook関数を設定する。
③モジュールによってはhttpd.config等に必要な設定し
て、Apache再起動。
簡単に言うと、これでモジュールは動作する。
さっきの図で追加補足すると
- 11. 実際にモジュールを作ってみる
モジュールを作る一番簡単な方法。
①apxsコマンドで雛形を作成。
# apxs -n test -g
オプションの意味:-n モジュール名の設定 -g 雛形の作成
実行すると、Makefile mod_test.c modules.mk こんなファイルが自動で作成。
②雛形を元に処理を記述。
③/usr/sbin/apxs -c -i mod_test.c
オプションの意味:-cでコンパイル、-iでインストール
でインストール。
④雛形のコメントに書かれているように
LoadModule test_module modules/mod_test.so
<Location>
SetHandler test
</Location>
を記述してapacheを再起動。
- 12. mod_testの中身(長いのでコメントは省略)
40 #include "httpd.h" 58 static void test_register_hooks(apr_pool_t *p)
41 #include "http_config.h" 59 {
42 #include "http_protocol.h" 60 ap_hook_handler(test_handler, NULL, NULL, APR_HOOK_MIDDLE);
43 #include "ap_config.h" 61 }
44 62
45 /* The sample content handler */ 63 /* Dispatch list for API hooks */
46 static int test_handler(request_rec *r) 64 module AP_MODULE_DECLARE_DATA test_module = {
47 { 65 STANDARD20_MODULE_STUFF,
48 if (strcmp(r->handler, "test")) { 66 NULL, /* create per-dir config structures */
49 return DECLINED; 67 NULL, /* merge per-dir config structures */
50 } 68 NULL, /* create per-server config structures */
51 r->content_type = "text/html"; 69 NULL, /* merge per-server config structures */
52 70 NULL, /* table of config file commands */
53 if (!r->header_only) 71 test_register_hooks /* register hooks */
54 ap_rputs("The sample page from mod_test.cn", r); 72 };
55 return OK;
56 }
- 16. 参考にした本?サイト(というかほとんどコピペです。)
オライリー:Apacheハンドブック 20章~21章
DSAS開発者の部屋:apache module 開発事始め
http://dsas.blog.klab.org/archives/50574774.html
Asial Blog:手軽に出来るApacheモジュール開発
http://blog.asial.co.jp/715
他、多数の「apache モジュール 開発」で検索ヒットしたサイトの皆様
非常に為になる解説本当にありがとうございます。m(_ _)m
もう少し勉強して、これからは少しは自分で解説を???。
あと、モジュール絡みの本は軒並み絶版になっているので、再版される事を期待。