Apache Software Foundation | Jakarta Project | Apache Tomcat
一般

一般的な情報と JK についての FAQ です。

JK についての質問やサポートはどこにありますか?

サポートについては doc ディレクトリにある JK の文書を読んでもらうことを基本方針としています。文書は Apache の Jakarta Web サイト Jakarta Tomcat Connectors Project でも公開しています。これ以外に何か聞きたいことがあれば Tomcat Users Discussion メーリングリストを利用するのが一番良いでしょう。ただし、メーリングリストへ質問を投稿する前に、 the mail list archive を検索してください。アーカイブの中に疑問を解決できるメールを見つけられなかった場合に、JK の質問をユーザーズメーリングリストに投稿すれば、教えてもらえます。質問するときは、 ここ を読んで Tomcat のメーリングリストへの加入方法を調べてください。また、どのようなプラットフォームで動かしているかといった情報とともに、Web サーバのバージョンを明記するようにしてください。


JK を見つけられません。どこにあるのでしょうか?

JK は jakarta-tomcat-connectors リポジトリに移動しました。JK のソースコードとバイナリは jakarta-tomcat-connectors ディレクトリ にあります。


JK と mod_jk の違いは何でしょうか?

JK はプロジェクト名です。JKプロジェクトは Web サーバから Tomcat コネクタまでをカバーしています。一方、 mod_jk は JK プロジェクトが開発した Apache のモジュール 名です。

Domino Web サーバ をサポートするために、JKは dsapi と呼ばれるリダイレクタを実装しています。

IIS Web サーバ をサポートするために、JKは isapi と呼ばれるリダイレクタを実装しています。

Netscape/iPlanet Web サーバ をサポートするために、JKは nsapi と呼ばれるリダイレクタを実装しています。


詳細な情報はどこで入手できるでしょうか?

JK 1.2.x については、次の文書を読んでください。

JK 2.0.x については Tomcat の設定 Web サーバの設定 の 2つに詳細な情報があります。これらは、とても良い、ためになる解説書です。また、メーリングリストアーカイブを "JK" というキーワードで検索してもいいですし、ソースコードを読むと理解が深まります。


Ajp12 と Ajp13 どちらのプロトコルを使えばいいでしょうか?

Ajp13 の方が新しいプロトコルで、速くなっている上に、SSL でも十分動作します。今なら、ajp13 をお勧めします。ajp12 は推奨されないプロトコルになりました。

ajp13 は Apache Tomcat の 3.2.x , 3.3.x, 4.0.x, 4.1.x というようにこれまでの全てのバージョンをサポートしてます。新しい Tomcat 5 もサポート対象になっています。

jetty のような他の Servlet エンジンも Ajp13 をサポートしています。


Web サーバと Tomcat の間にファイアウォールがあると ajp13 のコネクションがしばらくすると切れてしまいます

Ajp13 は永続的なコネクションを採用していますが、Tomcat に送られるリクエストが一つも無い場合、トラフィックは null という状態になっているかもしれません。Web サーバと Tomcat が正当な接続状態にあると思っている場合でも、ファイアウォールはアクティブではないと判断して接続を切ってしまうことがあります。

ajp13 の設定に追加された socket_keepalive プロパティを使って、JK 1.2.0 を起動するといいでしょう。この方法については ワーカの手引き を参照してください。


高負荷の状況下で、ほとんどの処理がApache Web サーバのみの処理にもかかわらず Tomcat のスレッドが多数存在します

高い負荷がかかる状況下にあると Apache Web サーバは負荷をさばくために数多くの子プロセスを生成します。その結果、Tomcat との間に多数のコネクションが生成され、処理が必要なリクエストが Tomcat にフォワードされます。通常、Apache Web サーバは負荷が下がると子プロセスやスレッドを kill します。しかし、静的なコンテンツへのリクエストのみ提供するだけになったにもかかわらず負荷が下がらないと、子プロセスは存在しつづけ、その子プロセスが維持している ajp13 のコネクションも要、不要にかかわらず存在しつづけます。

このため、JK 1.2.0 には cache_timeout socket_timeout プロパティを追加し、ある一定期間使われなかったコネクションをクローズするようにしました。詳細な情報については ワーカの手引き を参照してください。



Apache

mod_jk と Apache Web サーバについての情報と FAQ です。

Tomcat を再起動すると、いつも Apache が応答しなくなるのですが

Ajp13 プロトコルは Tomcat と Apache を繋ぐソケットを常に開いた状態にしています。Apache から Tomcat への接続が存在する状態でTomcat 側の接続が開放されると、ネットワークトラブルを引き起こします。再起動により、Tomcat 側の接続が開放される場合は Apache も同様に再起動しなければならないでしょう。


Linux バイナリのダウンロードディレクトリに 2つの mod_ji.so(-eapi と -noeapi) があるのはなぜですか?

Apache は様々なバージョンで拡張API とよばれる修正されたAPI を利用しています。これは、 mod_ssl モジュール を使う目的で開発されました。

例えば、最近の Linux ディストリビューションには mod_ssl を含む Apache が入っているものがあります。

この場合、'拡張された Apache' を入手したことになるので、 mod_jk.so-eapi が必要になります。

'標準 Apache' (つまり、mod_ssl が無いものです) なら、 mod_jk.so-noeapi を使ってください。

EAPI(拡張API)用のモジュールを STD API(標準API)の Apache で使うのは避けるべきですし、逆の、標準APIモジュールを EAPI を使っている Apache で使うのも避けるべきです。使っている Apache のバージョンに合った mod_jk.so を使うよう、常に注意を払ってください。


'garbled DSO' というメッセージは何を意味しているのでしょうか?

これは Apache の EAPI に関係していますが、'mod_jk.so is garbled - perhaps this is not an Apache module DSO ?' というメッセージは、EAPI を使う Apache でコンパイルされた DSO モジュール mod_jk.so を標準の API しか使わない Apache にインストールしようとしていることを通知しています。EAPI は Readhat ディストリビューション 6.2/7.0 など mod_ssl がインストールされている Apache で使われています。


'module might crash under EAPI!' というメッセージは何を意味しているのでしょうか?

これも EAPI に関係していますが、'[warn] Loaded DSO /usr/lib/apache/mod_jk.so uses plain Apache 1.3 API, this module might crash under EAPI! (please recompile it with -DEAPI)' というメッセージは mod_jk.so が Apache の標準API を使ってコンパイルされているにもかかわらず、EAPI 版 Apache にインストールしようとしていることを通知しています。


ビルド方法のセクションに書いてあるとおりにひとつひとつ実行しましたが、mod_jk ビルドで APXS が rc=0 or rc=255 のようなエラーになってしまいました。どうすればいいのでしょうか?

APXS は Perl スクリプトで、Apache をソースからビルドするときに生成されます。このようなエラーはバイナリ版の Apache を取得した場合に発生することが多いのですが、APXS があなたのシステム用に、正しくコンフィギュレーションされていないことが原因です。http://httpd.apache.org から Apache のソースコードを取得して自分でビルドするのが最良の解決法です。次に示す基本的なビルドを行ってください(ここで使用した以外のオプションについては Apache の文書を参照してください)。

[user@host] ~ $ cd /usr/local/src
[user@host] ~ $ gzip -dc apache_1.3.19.tar.gz|tar xvf -
[user@host] ~ $ cd apache_1.3.19
[user@host] ~ $ ./configure --prefix=/usr/local/apache \
[user@host] ~ $ --enable-module=most \
[user@host] ~ $ --enable-shared=max
[user@host] ~ $ make
[user@host] ~ $ make install

注意: 上記は Apache のソース版をダウンロードし、/usr/local/src ディレクトリに置いたと仮定しています。


Apache 2.0 がモジュールのバージョンが正しくないと言ってきます

Apache 2.0 の API は現在でもたびたび修正されてされています。このため、Apache 2.0 開発チームはコンパイルされたモジュールのヘッダに Apache 2.0 のどのバージョンでコンパイルされているのかの情報を入れることにしました。このチェックは Magic Module Number バンプとよばれています。

Apache 2.0 は起動時にモジュールのヘッダの中にあるバージョンをチェックして、他の Apache 2.0 バージョンでコンパイルされたモジュールが検出されると Apache を停止します。使っている Apache 2.0 と同じバージョンでコンパイルされたモジュールを使うようにしてください。このチェックは将来的には削除される予定です。


JNI が Apache 1.3 で動きません

JNI はマルチスレッド環境下でサポートされますが、Apache 1.3 は通常、マルチスレッド化されていません。Apache 1.3 がスレッドをサポートするようにビルドされているか、また、 httpd.conf ファイルに POSIX スレッドライブラリをロードする設定があるかを調べてください。

# httpd.conf で pthread を Apache に追加
LoadModule "/usr/lib/libpthreads.so"

ただし、JNI はマルチスレッド化されたサーバに特化していることを忘れないでください。JNI をサポートするためには Apache 2.0 にバージョンアップすることを検討するべきでしょう。


Linux 環境で JNI が JVM を起動できないと報告してきました

Linux 環境では Apache サーバを起動する *前* にいくつかの環境変数をセットしておかなければなりません。

export LD_LIBRARY_PATH=$jre/bin:$jre/bin/classic:$LD_LIBRARY_PATH

Linux のディストリビューションによっては 'floating stacks' とよばれる GLIBC の機能が有効になっています。この機能は、カーネルのバージョンが 2.4.10 以下の SMP マシンでは動作しません。次の環境変数をエクスポートすると floating stacks の機能を無効にできます。

export LD_ASSUME_KERNEL=2.2.5

例えば /etc/rc.d/init.d/httpd ですが、起動時に実行されるサービススクリプトを修正すれば、httpd サーバを起動する前に、これらの環境変数を設定できます。


configure を使ってビルドした時のさまざまなエラー

configure は、いくつかの GNU tool が既にシステムにインストール・設定されていること、 最低限 libtool があることを想定しています。

また、システムによっては cc と gcc が混在してセットアップされていることがあります。 このような場合には、OS 付属の C コンパイラでビルドされた Apache に gcc を使ってビルドした jk/jk2 を接続させようとして、混乱してしまうことがあります。

結局、いくつかの OS 付属の make は思い通りに動いてくれないので、GNU make gmake を使用するべきです。


Solaris 8 において JK2 をビルドすると missing FIONBIO のエラーが出力されます

v2.0.2 以前の JK2 を Solaris でビルドするには、jk/native2/common/jk_channel_socket.c の最初に

#define BSD_COMP
を追加しなければいけません。



IIS

JK と IIS Web サーバについての情報と FAQ です。

このパラグラフはまだありません。ですから、あなたが貢献できるところです。


NES/iPlanet

JK と NES/iPlanet Web サーバについての情報と FAQ です。

このパラグラフはまだありません。ですから、あなたが貢献できるところです。


[訳注: これは原田 洋子が翻訳しました。日本語訳に対するコメントがあれば、こちらに送って下さい。]