Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Webサーバ勉強会03

  • Login to see the comments

Webサーバ勉強会03

  1. 1. Webサーバ勉強会 #3 発表資料
  2. 2. 自己紹介 id:oranie  @oranie•渋谷の緑色のグループ会社で、グループ内でも余り知られていないシステムでなんか色々やる簡単なお仕事しています。•緑色のみんながよく知っているサービスの裏側とかは全く知らないですw
  3. 3. ざっくり内容①モジュールって何やっているの? ②どうやって動いているの?
  4. 4. 発表内容 初心者がApacheモジュールとはなんぞや? をとりあえず調べてみた。
  5. 5. そもそも Apacheのモジュール(mod_rewriteやmod_authやら色々) は一杯あるけど、 そもそもどんな動作をしているの?
  6. 6. そもそも②まずApacheはリクエストを受け取ると、どのような動きで処理をしているのか?
  7. 7. Apacheの処理フェイズについてApache はリクエストを複数の フェイズ (phase) で処理。典型的な静的ファイルの場合(1) 要求された URI を実際のファイルの場所に変換する(2) ファイルを読み出してクライアントに送信する(3) リクエストをログに記録するというざっくり分けて三つのフェイズがある。※細かく分けるともっとあります。今日は割愛。例えばmod_auth_basicによるbasic認証が掛かっている場合は、1のフェイズ にリクエストを処理、次に認証掛かっているディレクトリなら認証処理をして 問題なければ2のフェイズに・・・と言った具合。
  8. 8. Apacheの主な動作 図で表すと
  9. 9. 基本処理を踏まえ、 モジュールを動作させるには?①Cで動作させたい処理を記述したモジュールを作る。②Apacheの適切なフェイズにモジュールで定義したhook関数を設定する。③モジュールによってはhttpd.config等に必要な設定し て、Apache再起動。簡単に言うと、これでモジュールは動作する。さっきの図で追加補足すると
  10. 10. 実際にモジュールを作ってみるモジュールを作る一番簡単な方法。①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を再起動。
  11. 11. 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 6245 /* 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 }
  12. 12. mod_testを実行してみると・・・モジュールを読み込んで、http://hogehoge/testにアクセスすると、「The sample page from mod_test.c」って表示されましたね?54 ap_rputs("The sample page from mod_test.cn", r);の内容が表示されました。処理フローとしては①クライアントからのリクエストを受信、解析②Apache内部で処理が順番に行われ、今回登録したハンドラが「test」へのリ クエストを引っ掛ける③引っ掛かったリクエストに対して、設定した内容をクライアントに返す。
  13. 13. mod_kaomojiを作ってみるもう少し改造して、例えば「うちの会社のtxt/htmlページには全てヘッダに「(・∀・)」を表示させたい。でもヘッダファイル書いて読み込ませる のは忘れるかも知れないし面倒臭い(゚Д゚)y─┛~~」と言った場合に、あるディレクトリにアクセスするとヘッダに「(・∀・)」を必ず追加するモジュール。実際にアクセスして実演します。
  14. 14. まとめ①モジュールはApacheの各処理フェイズで任意の制御・処理を 行いたい時に利用する。②モジュール内部は実処理部分、Apacheに登録するフック関 数、モジュールの定義をしている構造体。③仕組みが分かればかなり自由になんでも出来る。→なので、 まずApacheの処理を覚えると、各モジュールの動作理解も 進むんじゃないでしょうか?④Cで作成する必要があるので、敷居は高いがその分高速らしい (普通に考えればそうだろうけど、実際に同じような処理書いてベンチ取っていないから誰か・・・!)⑤簡単な表示とかならすぐ作れるっぽいですね!僕は心優しい人のコピペで 文字列ちょろっと変えたぐらいですが・・・。⑥動作を調べたい時にCが読めないと、泣きながら調べる羽目 になります。
  15. 15. 参考にした本・サイト(というかほとんどコピペです。) オライリー: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 もう少し勉強して、これからは少しは自分で解説を・・・。 あと、モジュール絡みの本は軒並み絶版になっているので、再版される事を期待。

×