Diary-nagataka-シリコンバレーで働きたい!という夢への日々

外資ITで働くエンジニアが趣味や日々の事など書いてます(技術の話は別ブログ http://wanna-be-geek.seesaa.net/ )

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告
  3. このエントリーを含むはてなブックマーク

[Apache]Apache2.4でMPMを動的に切り替える

Apache2.4.1がリリースされました。

2.2から六年振りのメジャーバージョンアップだそうですね。
http://news.mynavi.jp/news/2012/02/24/031/

新機能一覧のなかに、MPMをモジュールとしてロード出来るようになりましたよという記載があります。
http://httpd.apache.org/docs/2.4/new_features_2_4.html

ちょっと気になるので、以下でインストール方法と、MPMの切り替え方の簡単なメモを残します。

MPMをモジュールとしてロードするには、./configureの際に --enable-mpms-shared=all というオプションを付けてあげる必要があります。

以下がインストールの方法。


# wget http://ftp.riken.jp/net/apache//httpd/httpd-2.4.1.tar.gz
# mv ./httpd-2.4.1.tar.gz /usr/local/src/
# cd /usr/local/src/
# gzip -d ./httpd-2.4.1.tar.gz
# tar xvf ./httpd-2.4.1.tar
# cd httpd-2.4.1
# ./configure --prefix=/usr/local/apache2.4 --enable-mpms-shared=all --enable-mods-shared=all --with-apr=/usr/local/apr
# make
# make install

※インストールするディレクトリを分けて、別のApacheと共存させたい場合は、上記のように --prefix= と指定してあげる。

※ここでもし以下のようなメセージが出たら、まずはAPRをインストールしなければならない。
configure: error: APR not found. Please read the documentation.

# wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.4.6.tar.gz
# ./configure
# make
# make install

# wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.4.1.tar.gz
# ./configure --with-apr=/usr/local/apr/
# make
# make install


※また、私の環境では以下のようにpcreが無いというメッセージが出たためこれもインストール
checking for pcre-config... false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

pcre-develのインストール
# yum -y install pcre-devel



これでApacheのインストールは完了。
静的にリンクされたソースの確認
# /usr/local/apache2.4/bin/apachectl -l
Compiled in modules:
core.c
mod_so.c
http_core.c

上記のように、MPMを動的にロードできるよう指定してコンパイルを行うと、静的リンクにMPMが表示されなくなる。
代わりに、以下のようにhttpd.confに記載をする
LoadModule mpm_event_module modules/mod_mpm_event.so

また、httpd.conf内を探すと、MPMそれぞれの設定は以下のように別ファイルになっているので、これを編集する
# Server-pool management (MPM specific)
#Include conf/extra/httpd-mpm.conf ← ここのコメントアウトを外してから、該当ファイルをカスタマイズ


以上、MPMを動的に切り替えられるApache2.4のインストール方法でした。

どういうシーンでこのエンハンスがメリットを発揮するのかちょっと今の私にはわからないですが、他の機能含めてApache2.4をしばらく色々と触ってみようと思います。
スポンサーサイト
  1. 2012/02/29(水) 20:38:26|
  2. Apache
  3. | トラックバック:0
  4. | コメント:0
  5. このエントリーを含むはてなブックマーク

[Apacheコードリーディング]ap_process_request

httpd-2.2.18/modules/http/http_core.c内の、ap_process_request()を読んだ。


static int ap_process_http_connection(conn_rec *c)
{
request_rec *r;
apr_socket_t *csd = NULL;

/*
* Read and process each request found on our connection
* until no requests are left or we decide to close.
*/
クライアントとの接続が完了した後、リクエストを読む処理

ap_update_child_status(c->sbh, SERVER_BUSY_READ, NULL);
while ((r = ap_read_request(c)) != NULL) {

c->keepalive = AP_CONN_UNKNOWN;
/* process the request if it was read without error */

ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
if (r->status == HTTP_OK)
ap_process_request(r);

if (ap_extended_status)
ap_increment_counts(c->sbh, r);

if (c->keepalive != AP_CONN_KEEPALIVE || c->aborted)
break;

ap_update_child_status(c->sbh, SERVER_BUSY_KEEPALIVE, r);
apr_pool_destroy(r->pool);

if (ap_graceful_stop_signalled())
break;

if (!csd) {
csd = ap_get_module_config(c->conn_config, &core_module);
}
apr_socket_opt_set(csd, APR_INCOMPLETE_READ, 1);
apr_socket_timeout_set(csd, c->base_server->keep_alive_timeout);
/* Go straight to select() to wait for the next request */
}

return OK;


}



ap_read_requestを呼んでリクエスト構造体を取得。
取得したリクエスト構造体を引数に、ap_process_requestを呼び、リクエストを処理させているという事がわかった。

ToDo
・ap_process_requestを読む
・リクエスト構造体の中身を見る(ap_read_request)
  1. 2012/01/15(日) 19:38:41|
  2. Apache
  3. | トラックバック:0
  4. | コメント:0
  5. このエントリーを含むはてなブックマーク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。