しいしせねっとわーく
[Javaのお部屋] [Tomcat] [java.dev.jp] [Developer.jp]
[Tomcat5.5のインストール] [mod_webapp] [mod_proxy_ajp]

Tomcat 5でmod_jk2を使ってしまう

mod_jk2は、Apache httpdとTomcatの通信に使うApache側のモジュールです。Tomcat側のCoyoteなどのモジュールとajp13というプロトコルで通信します。たぶん。Apache内でTomcatを動作させる機能も持っています。mod_webappがTomcat 5では使えるかどうかわからないのでTomcat 5を設定するときにようやく調べて設定しました。

しかし、mod_jk2の開発も終わってしまったようで、なぜこんなにころころとモジュールを変えてくれるのでしょうね。Apache 1.xではmod_jkの1.2、Apache 2.xでは、mod_proxyとmod_proxy_ajpのセットに移行するようですが、ま、ここではとりあえずそのまま使ってしまいます。

tomcat-connectors-4.1.x-src.tar.gz ではなく、Tomcat本体のsrcを取ってきます。どっちでもいいのかも。Tomcat の src ディレクトリにあります。
binディレクトリは、期待しないでおきましょう・・・。

必要な環境

ダウンロード

いろんなところにあるので、取ってきましょう。最新版のTomcatのsrcか、コネクタだけのパッケージをダウンロードしてください。たかがコネクタでも、古いのはいろいろ不具合だらけです。コネクタのバージョンは2.0.4ぐらいでしょうか。

Apache 1.3の場合、Tomcatの他にaprとapr-utilが必要です。その他、antもあってもいいかもしれませんが、ここでは使わないです。

RINGとか

コンパイル、インストールから

Apache 1.3系の場合 aprなどを解凍しておきます。Apache 2.0系では必要ありませんでした。

# tar zxvf apr-0.9.4.tar.gz
# tar zxvf apr-util-0.9.4.tar.gz

configure や make はmod_jk2のなかで一括でするので、ここでmakeする必要はありません。Apache本体もいっしょにmakeできるようですが、既にインストールされていると思うので、ここではmod_jk2だけを作るということにします。

最初にApache 1.3系の場合

# tar zxvf jakarta-tomcat-5.0.27-src.tar.gz
# cd jakarta-tomcat-5.0.27-src/jakarta-tomcat-connectors/jk/native2
# chmod +x buildconf.sh
# ./buildconf.sh

さらにapr-1.xを使う場合

(調査中)

apr-0.x な場合

# ./configure
--with-apxs=/usr/sbin/apxs (必要)
--with-apr=/home/xxxx/apr-0.9.4 (絶対パスがよいらしい)
--with-apr-util=/home/xxx/apr-util-0.9.4
--with-tomcat41=〜 (Tomcat 5では不要だった)
--with-PACKAGE=yes (これも不要)
--disable-threads (Vineではpthreadを無効に)
# make
# cd ..
# cp build/jk2/apache13/mod_jk2.so /etc/httpd/modules (Apacheのmodulesへ)
# cp conf/workers2.properties /etc/httpd/conf (Apacheのconfへ)

jakarta-tomcat-5.0.27-src/jakarta-tomcat-connectors/jk/build/jk2/apache13 に mod_jk2.so が出来上がっています。

次はApache httpd 2.0系の場合

(aprなどは不要)

# tar zxvf jakarta-tomcat-5.0.27-src.tar.gz
# cd jakarta-tomcat-5.0.27-src/jakarta-tomcat/connectors/jk/native2
# chmod +x buildconf.sh
# ./buildconf.sh (必要かな?)
# ./configure --with-apxs2=/usr/sbin/apxs
# make
# cd ..
# cp build/jk2/apache2/mod_jk2.so /etc/httpd/modules
# cp conf/workers2.properties /etc/httpd/conf

apache2の場合は、--with-apxs2= でapache2.xのapxsを指定します。mod_jk2.so の場所も少しだけ違います。

jk/conf/の設定ファイルも一部必要です。

mod_jk2の設定

Apacheの conf/httpd.conf に

LoadModule jk2_module modules/mod_jk2.so
AddModule mod_jk2.c

を加えます。mod_jk の頃のような include はしなくていいみたいです。AddModule は、場合によっては必要ないかもしれません。httpd.confの変更はこれだけです。残りの設定はworkers2.propertiesで行います。

jk/conf/workers2.properties を apache の conf ディレクトリへコピーします。これの使い方があんまりよくわかりませんが、それほど難しくもないようで、http://www.jajakarta.org/tomcat/tomcat-jk2/ja/docs/jk2/configweb.html こんなところを参考にしてみるとよいのでしょうか。

http://tomcat.apache.org/connectors-doc/ こっちのほうがいいかも

http://tomcat.apache.dev.jp/connectors-doc/ 偽日本語訳をしてみたり。

workers2.propertiesに必要なものはなんだろう

Apache側で準備です。サンプルもあるので見てみましょうか。Tomcatとの通信方法とリダイレクトするURLの2つが必要です。group名を指定すると簡単なので、groupを使ってみます。ほんとうはgroup関係ないかもしれませんが。

その1 Tomcatと通信するためのコネクタの指定

[channel.socket:サーバ名:ポート番号]
info=ぐたぐたした説明
# host=Tomcatのホスト名 (省略すると↑のサーバ名)
# port=Tomcat ajp13のポート番号(省略すると↑のポート番号)
# tomcatId=サーバ名:ポート番号 これは負荷分散などで使うのでとりあえず要らない
group=グループ名

のように書かれているところです。もしかするとどちらかのサーバ名:ポート番号がでたらめでもいいのかもしれません。そして、これにgroup=で名前をつけています。この名前でTomcatを選ぶことができるようになりました。Tomcatの数だけ[channel.socket] を増やせます。

その2 URLとTomcatを強引に結びつける

# ワーカーの設定 (なくてもいいらしい)
[ajp13:サーバ名:ポート番号]
channel=channel.socket:サーバ名:ポート番号

というのも必要なのかもしれませんが、省略しても動いています。channel を複数用意したけど動かない、というときは、これも必要だったのかもしれないと思い出してみてください。

書式の1 バーチャルドメインではないとき

[uri:〜] /からはじまるパスのみの指定
info=うだうだと説明
group=グループ名
# worker=ajp13:ワーカー名 (使っていないふりをする)

書式の2 バーチャルドメインのとき

[uri:サーバ名/パス.拡張子とか] /からはじまらないときの指定。もしかするとポート番号も指定できる?
info=以下同文
group=グループ名
# worker=ajp13:ワーカー名 (使っていないふりをする)

注意点

というのがあります。[uri:/〜] と/からはじめると、サーバ名指定のないディレクトリ名だけ、[uri:www.example.com/*] などとすると、サーバ名含むバーチャルドメインに対応した指定になります。バーチャルホスト使っていないなら、サーバ名は指定しなくていいです。そして、どこのTomcatに接続するかというグループ名を指定するだけです。これで、mod_jk2の設定はOKです。ロードバランサーとか使わないので[lb:〜] なところは必要なしです。

パスは、Tomcat側で処理したいURLだけが通るように*.jsp とか適当に指定します。Servletはどうするの? ってそんなのも忘れないように。

ということで

Tomcatと通信するのが channel

channel を選ぶのがワーカー(ajp13:〜)

[uri: ではワーカーを指定する

省略したときはなんとなく動く

ということです。

あとは [shm: ] の項目だけ残してばっさり消してしまいましょうか。

TCPを使ってTomcatと通信したり、unix_socketを使ってみたり、いろいろできるようです。

あとは、$CATALINA_BASE/conf/jk2.properties もあります。こちらは、jniを使ってApache内でTomcatを動作させる場合に必要ですかね。今回はjni使わないのであんまり気にしない。jni使う設定は、サンプルの中にそろっているようなのでここでは省略か。

いろいろ複雑なので、ちっちゃい方がいいかもしれないですね。

Apache側の設定はこれだけなのです。

起動してみる

Tomcat の conf/server.xml で AJP13が有効になっているのを確認したら、Tomcat、 Apache の順に起動します。本当は順番はどっちでもいいです。

http://localhost/examples/jsp/index.html 等が表示されたら成功です。

さらなる設定(カスタマイズ)

Tomcatへのディレクトリ割り振りの対応は、$APAHCE_HOME/conf/workers2.properties で行います。
$CATALINA_HOME/conf/jk2.propertiesもありますが、これは編集不要。

さて、次はマルチドメインバーチャルホストへの対応、複数Tomcat をApache と共に動作させる場合の設定などです。

server.xml の <Host name="virtualhost" debug="0" appBase="appBaseDir" 〜>を複数記述すればバーチャルホストは完成します。
mod_jk2 側でうまくバーチャルホスト単位でディレクトリを判定するには、workers2.properties を編集するのでせうか。

参考


© 2002,2004 おこめ@しいしせねっと