Webサーバ勉強会03

Webサーバ勉強会 #3
    発表資料
自己紹介



               id:oranie 
                @oranie

•渋谷の緑色のグループ会社で、グループ内でも余り知られていないシステムでなん
か色々やる簡単なお仕事しています。

•緑色のみんながよく知っているサービスの裏側とかは全く知らないですw
ざっくり内容




①モジュールって何やっているの?

 ②どうやって動いているの?
発表内容




        初心者が
Apacheモジュールとはなんぞや?
   をとりあえず調べてみた。
そもそも




      Apacheのモジュール
(mod_rewriteやmod_authやら色々)
       は一杯あるけど、
 そもそもどんな動作をしているの?
そもそも②




まずApacheはリクエストを受け取ると、
どのような動きで処理をしているのか?
Apacheの処理フェイズについて

Apache はリクエストを複数の フェイズ (phase) で処理。
典型的な静的ファイルの場合
(1) 要求された URI を実際のファイルの場所に変換する
(2) ファイルを読み出してクライアントに送信する
(3) リクエストをログに記録する
というざっくり分けて三つのフェイズがある。
※細かく分けるともっとあります。今日は割愛。
例えばmod_auth_basicによるbasic認証が掛かっている場合は、1のフェイズ
 にリクエストを処理、次に認証掛かっているディレクトリなら認証処理をして
 問題なければ2のフェイズに・・・と言った具合。
Apacheの主な動作

  図で表すと
基本処理を踏まえ、
       モジュールを動作させるには?
①Cで動作させたい処理を記述したモジュールを作る。
②Apacheの適切なフェイズにモジュールで定義した
hook関数を設定する。
③モジュールによってはhttpd.config等に必要な設定し
  て、Apache再起動。

簡単に言うと、これでモジュールは動作する。
さっきの図で追加補足すると
Webサーバ勉強会03
実際にモジュールを作ってみる
モジュールを作る一番簡単な方法。
①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を再起動。
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 }
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」へのリ
 クエストを引っ掛ける
③引っ掛かったリクエストに対して、設定した内容をクライアントに返す。
mod_kaomojiを作ってみる
もう少し改造して、例えば「うちの会社のtxt/htmlページには
全てヘッダに「(・∀・)」を表示させたい。でもヘッダファイル書いて読み込ませる
 のは忘れるかも知れないし面倒臭い(゚Д゚)y─┛~~」と言った場合に、
あるディレクトリにアクセスするとヘッダに「(・∀・)」を
必ず追加するモジュール。

実際にアクセスして実演します。
まとめ
①モジュールはApacheの各処理フェイズで任意の制御・処理を
 行いたい時に利用する。
②モジュール内部は実処理部分、Apacheに登録するフック関
 数、モジュールの定義をしている構造体。
③仕組みが分かればかなり自由になんでも出来る。→なので、
 まずApacheの処理を覚えると、各モジュールの動作理解も
 進むんじゃないでしょうか?
④Cで作成する必要があるので、敷居は高いがその分高速らしい
 (普通に考えればそうだろうけど、実際に同じような処理書いてベンチ取っていないから誰か・・・!)

⑤簡単な表示とかならすぐ作れるっぽいですね!僕は心優しい人のコピペで
 文字列ちょろっと変えたぐらいですが・・・。

⑥動作を調べたい時にCが読めないと、泣きながら調べる羽目
 になります。
参考にした本・サイト(というかほとんどコピペです。)
         オライリー: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


       もう少し勉強して、これからは少しは自分で解説を・・・。
 あと、モジュール絡みの本は軒並み絶版になっているので、再版される事を期待。
1 sur 16

Contenu connexe

En vedette(20)

OSC2012 OSC.DB HadoopOSC2012 OSC.DB Hadoop
OSC2012 OSC.DB Hadoop
Shinichi YAMASHITA1.3K vues
MongoDB日本語紹介資料MongoDB日本語紹介資料
MongoDB日本語紹介資料
ippei_suzuki2.6K vues
分散仮想ストレージシステム紹介分散仮想ストレージシステム紹介
分散仮想ストレージシステム紹介
OSSラボ株式会社7.1K vues

Plus de oranie Narut

Devsumi2019 dynamodbDevsumi2019 dynamodb
Devsumi2019 dynamodboranie Narut
908 vues75 diapositives
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talksoranie Narut
8.8K vues60 diapositives
Fluentd casualFluentd casual
Fluentd casualoranie Narut
5.2K vues29 diapositives
Webサーバ勉強会#5Webサーバ勉強会#5
Webサーバ勉強会#5oranie Narut
1.6K vues21 diapositives
Webサーバ勉強会#4Webサーバ勉強会#4
Webサーバ勉強会#4oranie Narut
2.3K vues16 diapositives

Plus de oranie Narut(10)

Devsumi2019 dynamodbDevsumi2019 dynamodb
Devsumi2019 dynamodb
oranie Narut908 vues
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talks
oranie Narut8.8K vues
Fluentd casualFluentd casual
Fluentd casual
oranie Narut5.2K vues
Webサーバ勉強会#5Webサーバ勉強会#5
Webサーバ勉強会#5
oranie Narut1.6K vues
Webサーバ勉強会#4Webサーバ勉強会#4
Webサーバ勉強会#4
oranie Narut2.3K vues
財務分析勉強会挨拶財務分析勉強会挨拶
財務分析勉強会挨拶
oranie Narut1.1K vues
Webサーバ勉強会02 Webサーバ勉強会02
Webサーバ勉強会02
oranie Narut1.7K vues
It勉強会の勉強会It勉強会の勉強会
It勉強会の勉強会
oranie Narut1.2K vues

Webサーバ勉強会03