mod_jkメモ

日本語だとなぜか mod_jk2 の情報がほとんどだったりして微妙に不便だったので自分用メモ。ここでは localhost のちょっと古い Vine LinuxApache 1.3.27 + mod_jk 1.2.13 + Tomcat 5.0.28)でソースからコンパイルしてみる。mod_jk2 は複雑すぎるし作者がやる気無くなったとかなんとかでサポートされなくなったらしい。なんじゃそら。
http://jakarta.apache.org/tomcat/connectors-doc/ から jakarta-tomcat-connectors-1.2.13-src.tar.gz をダウンロード。今見たら 1.2.14 が出てるけどまぁいいや。展開して jk/native ディレクトリに移動して configure する。

> ./configure --with-apxs=/usr/sbin/apxs

make すると、

> make

jk/native/apache-1.3 ディレクトリに mod_jk.so とか mod_jk.a とかができてるはず。mod_jk.so を /usr/lib/apache にコピーする。

# cp mod_jk.so /usr/lib/apache

jk/conf ディレクトリに mod_jk の設定ファイルのサンプルが置いてある。workers.properties.minimal が最小構成*1の設定ファイルなのでこれをもとにカスタマイズしていく。

# cp workers.properties.minimal /etc/httpd/conf/workers.properties

このファイルの設定の仕方については http://jakarta.apache.org/tomcat/connectors-doc/config/workers.html を参照するのが正しい。 ApacheTomcat を同じマシンで動かす場合、workers.properties を書き換える必要は無い。

worker.list=wlb,jkstatus

worker.ajp13w.type=ajp13
worker.ajp13w.host=localhost
worker.ajp13w.port=8009

worker.wlb.type=lb
worker.wlb.balance_workers=ajp13w

worker.jkstatus.type=status

mod_jk は "worker" という単位で接続先の Tomcat を管理する。基本的には接続先の Tomcat 一つが worker 一つに対応する。worker には名前*2を付ける必要があり、ここでは ajp13w がその名前である。また、worker には "type" を必ず指定する必要がある。普通の worker の場合は「AJP13 というプロトコルでこの Tomcat に接続しなさい」ということを意味する、ajp13 という type を指定する。host と port にはそれぞれ接続先のホスト名(もしくはIPアドレス)とポート番号を指定する。

またこの他に特殊な type として lb と status がある。lb とはロードバランス用の特殊な worker のことで、ロードバランス対象の複数の worker を一つにまとめて扱うために存在する。ここでは

worker.wlb.balance_workers=ajp13w

という行で wlb という名前のロードバランサが ajp13w という名前の worker を扱うように指定している。worker を一つしか指定していないので全然ロードバランスの意味がないが……。複数の Tomcat でちゃんとロードバランスしたい場合は対応する worker の名前をコンマで区切って書き連ねればよい。デフォルトの設定では同じセッションに属するリクエストは同じ worker に割り振ってくれる。

status という type の worker は mod_jk の状態を監視するための特殊な worker である。

最後に、Apache がリクエストを振り向ける対象の worker の名前を worker.list に指定する。

worker.list=wlb,jkstatus

ここに ajp13w の名前が無いのは、ロードバランス対象の worker は wlb が扱うので書く必要がない(というか書いてはいけない?)からである。

Apache の設定ファイルである httpd.conf の末尾に mod_jk 用の設定を追加する。ここの設定については http://jakarta.apache.org/tomcat/connectors-doc/config/apache.html をちゃんと読むのが正しい道だろう。

LoadModule	jk_module	modules/mod_jk.so


	JkWorkersFile	/etc/httpd/conf/workers.properties
	JkLogFile	/var/log/httpd/mod_jk.log
	JkMount		/jsp-examples/*	wlb
	JkMount		/jkstatus	jkstatus

これらの設定が httpd.conf の末尾にある場合、LoadModule 行だけあればよく、AddModule 行は要らないようだ。よくわかってないけど http://mm.apache.jp/pipermail/apache-users/2002-October/001969.html が少し参考になるか。どの URI をどの worker に振り向けるかは JkMount で指定する。ここでは TomcatJSP サンプルへのアクセスを wlb へ、mod_jk の状態監視のリクエストは jkstatus に振り分けている。

あとは Tomcat を起動してから httpd を起動すればちゃんと動くはず。http://localhost/jkstatus にアクセスすれば mod_jk の状態が見られるよ。

*1:実際にはもっと小さくすることもできるが……。

*2:アルファベットと数字のみで大文字小文字は無関係。