![]() |
![]() |
Gal Shachor著 <shachor@il.ibm.com>
mod_jkは、以前の mod_jserv を置き換えるものです。 これはTomcatとApache間の通信を処理する完全に新しい Tomcat-Apache プラグインです。
以下のような理由があります。
新しい簡単な設定メカニズムを知る必要がありますが、 このメカニズムを一度学べば、IISやNetscape (おっと、iPlanet ですね)のような他のWebサーバ上でもTomcatをすぐ使用できます。
このドキュメントの中で私が使用する用語を以下のように定義します。
|
意味 |
---|---|
ワーカプロセス (worker process) |
ワーカは、Web サーバから来たservletのリクエストを処理するTomcatのインスタンスです。 多くの場合には、ワーカは一つ (一つのワーカと、一つのTomcatプロセスだけです) ですが、負荷分散やサイトの分割をおこなうために、複数のワーカを実行することもあります。 Webサーバは、各ワーカを、それが配置されたホストと、接続待ちしているポート番号、メッセージ交換に使用される通信プロトコルによって識別します。 |
プロセス内ワーカ (In process worker) |
これは特殊なワーカです。 別プロセスである Tomcat プロセスと一緒に動作するのではなく、 Web サーバが JVM をオープンし、Web サーバプロセスのアドレス空間の中で Tomcat を実行します。 この文書では、この特殊なワーカについては解説しません。 |
Web サーバプラグイン (Web server plugin)/ tomcat リダイレクタ (tomcat redirector) |
さまざまなWeb サーバと協調する Tomcat には、Web サーバ内に存在して、servlet リクエストを送信してくれる"エージェント"が必要になります。 これがWebサーバプラグインですが、私たちの場合のWebサーバプラグインは mod_jk です。 このリダイレクタをWebサーバに組み込めるように、たいていはDLL/共有オブジェクトモジュールの形式で配布されます。 |
プラグイン設定 (Plugin configuration) |
他の Tomcat ワーカにリクエストを転送するためには、Webサーバプラグインを設定する必要があります。 この情報には、プラグイン設定の一部であるログレベルのような内部パラメタも含まれます。 |
Web サーバ設定 (Web server configuration) |
Webサーバは、どのように動作するかを定義する設定を持っています。 たとえばどのポート番号で接続待ちするのか、どのファイルを配信するのか、どの Web サーバプラグインをロードするかなどです。 そこで、Tomcat リダイレクタをロードするためには、それを指示するようにWebサーバの設定を変更する必要があります。 |
以下の順序で設定してください。
すでにmod_jservを使用するようにApacheを設定している場合には、httpd.confからすべてのApJServMount宣言子を削除してください。 tomcat-apache.confやtomcat.confをインクルードしている場合には、それらのファイルはmod_jserv固有なので、同様に削除します。
リダイレクタはVisual C++ Ver.6.0を使って開発されたので、カスタムビルドしたい場合には、あらかじめこの環境を用意しておく必要があります。
以下の順序で実行します。
この方法で、リダイレクタプラグイン (mod_jk) のリリース版とデバッグ版の両方を作成できます.
他にmsdevのmod_jk.dspをオープンして、ビルドメニューを使って作成する方法があります。
apacheの場合です。
apxs -o mod_jk.so -DSOLARIS -I../jk -I/usr/java/include -I/usr/java/include/solaris -c *.c ../jk/*.cシステムによっては、これでモジュールを正しくビルドできますが、実行時に"symbol "fdatasync" not found"というエラーで失敗することがあります。 これを修正するためには、上のコマンドの-cの直後に、-lposix4を追加してください。
apxs -o mod_jk.so -I../jk -I/usr/local/jdk/include -I/usr/local/jdk/include/linux -c *.c ../jk/*.cソースディレクトリではなく、カレントディレクトリに対して、../jkディレクトリからオブジェクトファイルをコンパイルすると、失敗するかもしれません。 その場合には、gcc -shared -o mod_jk.so *.oを実行すれば、ビルドを終了できます。
server.xmlファイルには、これと似ている(mod_jservが通信する)ポート8007でAjp12コネクションを用いるためのブロックが定義されています。 Ajp13を使用するだけの場合でさえも、このコネクタはTomcatのシャットダウンに必要なので、削除したいとは思わないでしょう。<Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp13ConnectionHandler"/> <Parameter name="port" value="8009"/> </Connector>
たいていの簡単な場合では、Tomcatが必要なApacheの設定を生成できます。 Tomcatを起動する時に、 Apacheのための設定ファイルが TOMCAT_HOME/conf/mod_jk.conf-auto に自動的に生成されます。 たいていは、httpd.conf中でこのファイルを取り込む ("Include TOMCAT_HOME/conf/mod_jk.conf-auto"を追加します) 以外に、何もする必要はありません。 それだけで、TomcatとApacheを起動して、Apacheサーバを経由してTomcatにアクセスできます。
たとえば、デフォルト以外のURL プレフィックスをマウントするなどの、 何か特別な要求がある場合には、 このファイルをカスタマイズする設定のベースとして使用して、 別のファイルに結果を保存することができます。 自分自身でApacheの設定を管理する場合には、新しいコンテキストを追加する時には必ずこのファイルを更新してください。
Tomcat 3.2: 新しいコンテキストを追加した後には、tomcatとapacheを再起動する必要があります。 これは、apacheが再起動せずに設定を変更する機能をサポートしていないからです。 さらに、 tomcatを起動した時にファイルTOMCAT_HOME/conf/mod_jk.conf-autoを生成するので、apacheを起動する前にtomcatを起動しておく必要があります。 Tomcatは、 起動する度にTOMCAT_HOME/conf/mod_jk.conf-autoを上書きするので、カスタマイズした設定をどこかに保存しておく必要があります。
ワーカは、ファイル TOMCAT_HOME/conf/workers.propertiesを使用して設定します。 より多くの情報がドキュメントworkers.propertiesの手引きに書かれているので、まずこれを最初に読んでください。 しかし、急いでいる場合には、ファイルworkers.propertiesを編集して、workers.tomcat_homeとworkers.java_home、ps変数を、あなたのシステムにとって正しい値に設定すれば、たぶん使用できるでしょう。
Apacheサーバ設定指示子を使用して、Apacheがmod_jkを使用するように設定すれば、実行を開始できます。 Tomcatのconfディレクトリに自動生成されるmod_jk.conf-autoを見てください。
LoadModule jk_module libexec/mod_jk.so AddModule mod_jk.c JkWorkersFile /usr/local/jakarta-tomcat/conf/workers.properties JkLogFile /usr/local/apache/logs/mod_jk.log JkLogLevel warn
mod_jkのJkMount指示子を用いて、TomcatにURLを割り当てます。 一般的な、JkMount指示子の構成を、以下に示します。
JkMount <URL prefix> <Worker name>
たとえば、以下のように指示子を用いた場合には、 すべての.jspで終了するリクエストや、/servlet/で始まるすべてのリクエストは、"ajp13"ワーカに送信しますが、 /otherworker内に配置されているファイルに対するJSPリクエストは "remoteworker"に送信します。
トップレベルか、あなたのhttpd.confファイルの<VirtualHost>セクションの中で、JkMount指示子を使用することができます。JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 JkMount /otherworker/*.jsp remoteworker
. . <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/> <Parameter name="port" value="8007"/> </Connector> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp13ConnectionHandler"/> <Parameter name="port" value="8009"/> </Connector> <Host name="host1.apache.org"> <Context path="" docBase="/web/host1" debug="0"/> </Host> <Host name="host2.apache.org"> <Context path="" docBase="/web/host2" debug="0"/> </Host> . . |
# Setup for Solaris system # workers.tomcat_home=/usr/local/jakarta-tomcat workers.java_home=/usr/java ps=/ worker.list=ajp12, ajp13 # Definition for Ajp13 worker (Ajp12 left to readers imagination) # worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13 |
# Load mod_jk # LoadModule jk_module libexec/mod_jk.so AddModule mod_jk.c # Configure mod_jk # JkWorkersFile /usr/local/jakarta-tomcat/conf/workers.properties JkLogFile /usr/local/apache/logs/mod_jk.log JkLogLevel warn # First Virtual Host. # <VirtualHost 10.0.0.1:80> DocumentRoot /web/host1 ServerName host1.apache.org JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 </VirtualHost> # Second Virtual Host. Also accessible via HTTPS # <VirtualHost 10.0.0.2:80> DocumentRoot /web/host2 ServerName host2.apache.org JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 </VirtualHost> <VirtualHost 10.0.0.2:443> DocumentRoot /web/host2 ServerName host2.apache.org SSLEngine On JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 </VirtualHost> |
このドキュメントは、Gal Shachorが作成し、Mike Bremfordがtomcat-devとtomcat-userリストの数えきれないほど多くの人の助力を得て改訂しました!
[訳注: これは風間一洋が翻訳しました。 日本語訳に対するコメントは、jajakarta-report@nekoyanagi.com宛に送って下さい。]
Copyright ©1999-2000 The Apache Software Foundation |