よくある質問

一般

JKに関する一般情報とFAQ

JKのヘルプ/サポートはどこで受けられますか?

サポートの主要な手段は、docディレクトリに含まれるJKドキュメントです。ドキュメントは、Apache Tomcat Connectors Project専用のApache Tomcatウェブサイトでも利用できます。追加のヘルプについては、Tomcatユーザーディスカッションリストが最適なリソースです。リストに質問を投稿する前に、メーリングリストのアーカイブを検索することから始めるべきです。アーカイブで質問の答えが見つからない場合は、JKに関する質問をユーザーリストに投稿して支援を求めることができます。使用しているウェブサーバーのバージョン、実行しているプラットフォームを含めるようにし、こちらでTomcatメーリングリストの購読方法を確認してください。

JKがどこにも見つかりません。どこにありますか?

JKがtomcat-connectorsリポジトリに移動したため、JKのソースとバイナリはTomcat Connectors (mod_jk) ダウンロードページのミラーからダウンロードできます。

JKとmod_jkの違いは何ですか?

JKは、ウェブサーバーからTomcatコネクタまでをカバーするプロジェクトです。

Apache HTTP Serverのサポートは、mod_jkモジュールと呼ばれるプラグインを使用してJK上に実装されています。

Microsoft IISのサポートは、ISAPIリダイレクタと呼ばれるプラグインを使用してJK上に実装されています。

詳細情報はどこで入手できますか?

JK 1.2.xについては、以下を読むべきです。

より詳細な情報については、リファレンスガイドをご覧ください。また、メーリングリストアーカイブで「JK」を検索するか、ソースコードを確認することもできます。

どのプロトコルを使用すべきですか - ajp12、ajp13、それともajp14?

ajp13が標準です。古いajp12は非推奨であり、ajp14は実験的です。

ajp13は、Tomcat 3.2以降のすべてのApache TomcatバージョンおよびJettyJBossのような他のサーブレットエンジンでもサポートされています。

ウェブサーバーとTomcatの間にファイアウォールがあり、しばらくするとajp13接続が切断されます

ajp13プロトコルは永続的な接続を使用するため、Tomcatに送信するリクエストがない場合、トラフィックはnullになる可能性があります。ファイアウォールは非アクティブな接続を切断する傾向があり、その結果、ウェブサーバーとTomcatは接続が有効であると誤解します。

JK 1.2.0以降、ajp13設定にsocket_keepaliveプロパティが追加されました。Workers HowToworkers.properties referenceでこれを確認することをお勧めします。他に解決策がない場合、JkOptions +DisableReuseを試すことができますが、これはパフォーマンスに大きな影響を与えます。

高負荷時、Apache HTTP Serverがほとんどの負荷を処理しているにもかかわらず、Tomcatに多くのスレッドが発生します

高負荷時、Apache HTTP Serverは負荷を処理するために多数の子プロセスを生成し、それがさらにTomcatへの多数の接続を作成して、処理すべきリクエストを転送します。通常、Apache HTTP Serverは負荷が減少すると子プロセス/スレッドを終了します。しかし、負荷が持続し、Apacheのみがリクエスト(静的コンテンツなど)を処理している場合でも、子プロセスは維持され、それに伴いすべてのajp13接続も、もはや使用されていなくても維持されます。

非アクティブな状態がしばらく続いた後に接続を閉じるには、connection_pool_timeoutを使用できます。詳細については、workers.properties referenceを参照してください。

Apache HTTP Server

mod_jkとApache HTTP Serverに関する情報とFAQ。

Tomcatを再起動すると、Apacheがロックアップします!

ajp13プロトコルは、TomcatとApache間のオープンソケットを維持します。Tomcat Connectorsに含まれるmod_jkのリリースは、ネットワーク障害を処理します。しかし、非常に古いmod_jkのリリースでは、Apacheも再起動する必要があるかもしれません。

Apache 1.3のダウンロードディレクトリにmod_jk.so (-eapi と -noeapi) の2つのファイルが存在するのはなぜですか?

多くのバージョンのApacheは、mod_sslモジュールで使用するために開発された、Extended APIとして知られる修正されたAPIを使用しています。Apache 2.0以降では、違いはなくなりました。

例えば、特定の最近のLinuxディストリビューションに含まれるApache 1.3には、mod_sslモジュールが含まれています。

したがって、そのような「Extended Apache」を使用している場合、mod_jk.so-eapiを使用する必要があります。

mod_jk.so-noeapiは「Standard Apache」(つまりmod_sslなし)の場合にのみ使用すべきです。

STD API ApacheでEAPIモジュールを使用したり、EAPI Apacheで標準APIモジュールを使用したりすることは避けるのが賢明です。常に、ご使用のApacheのバージョンに一致するmod_jk.soがあることを確認してください。

「garbled DSO ?」というメッセージは何ですか?

これはApache EAPIに関連しており、メッセージ'mod_jk.so is garbled - perhaps this is not an Apache module DSO ?'は、EAPIを使用するApache(apache-mod_sslやRedhat distro 6.2/7.0のapacheなど)でコンパイルされたmod_jk.so DSOモジュールをインストールしようとしているが、お使いのシステムでは通常のAPIを持つ標準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が標準APIを持つ通常のApacheでコンパイルされており、EAPIを使用するApacheにモジュールをインストールしようとしていることを意味します。

mod_jkのビルド中にAPXSがrc=0またはrc=255のようなエラーを出します。ビルドセクションのすべての手順を試しましたが、次に何をすればよいですか?

APXSは、Apacheウェブサーバーをソースからビルドするときに作成されるPerlスクリプトです。これらのエラーが発生し、Apacheをバイナリ配布版として入手した場合、APXSがシステムに正しく設定されていない可能性があります。Apache HTTP Serverのホームページから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 \
            --enable-module=most \
            --enable-shared=max
[user@host] ~ $ make
[user@host] ~ $ make install

注:上記の手順は、Apacheのソースをダウンロードして`/usr/local/src`ディレクトリに配置したことを前提としています。

Apacheがモジュールバージョンが不正だと文句を言います

Apache APIはバージョン間で変更される可能性があるため、Apacheモジュールにはモジュールをコンパイルするために使用されたApache APIのバージョンが含まれています。これはマジックモジュール番号(Magic Module Number)と呼ばれます。

起動時、ApacheはモジュールヘッダーのバージョンがApacheサーバーと互換性があるかチェックします。互換性がない場合、起動を拒否し、エラーをログに記録します。

マイナーバージョンは前方互換性があることに注意してください。モジュールがApache 2.x.yを使用してコンパイルされた場合、生成されるバイナリは、zがy以上である他のバージョン2.x.zで動作するはずです。zがyより小さいバージョン2.x.zとの互換性も必要な場合は、configureフラグ`--enable-api-compatibility`を使用してください。xがyと異なる場合、任意の2.xでコンパイルされたモジュールは2.yとは互換性がないことに注意してください。この場合、モジュールを再コンパイルする必要があります。

最新のApache 2.xで動作しますか?

mod_jkはApache 2.xの2.0から2.4までうまく動作します。

mod_jkの機能の重要な部分は、Apache HTTP Serverモジュールであるmod_proxy_ajpとmod_proxy_balancerで再実装されました。これらはApache 2.2および2.4の標準配布の一部です。新しいモジュールはmod_jkのすべての機能を含んでいませんが、その一方で、新しいApacheリリースごとにモジュールが自動的に取得されます。

JNIはApache 1.3で動作しません

JNIワーカーは非推奨になりました。おそらく動作しないでしょう。使用しないでください。

JNIのサポートにはマルチスレッド環境が必要ですが、これはApache 1.3の一般的なケースではありません。Apache 1.3がスレッドサポート付きでビルドされているか確認し、そうでない場合はhttpd.confファイルにpthreadsライブラリを追加できます。

# Add pthread to Apache in httpd.conf
LoadModule "/usr/lib/libpthreads.so"

また、JNIはマルチスレッドサーバーに適しており、JNIをサポートするためにApache 2.xへのアップグレードを検討すべきであることも覚えておいてください。

JNIがLinux下でJVMを起動できないと報告します

JNIワーカーは非推奨になりました。おそらく動作しないでしょう。使用しないでください。

Linux下では、Apache HTTP Serverを起動する前にいくつかの環境変数を設定する必要があります

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

また、一部のLinuxディストリビューションでは、「floating stacks」と呼ばれるGLIBC機能が有効になっており、SMPマシンでカーネル2.4.10未満では動作しない場合があります。環境変数をエクスポートすることでfloating stacksを無効にすべきです。

export LD_ASSUME_KERNEL=2.2.5

Apacheサーバーが起動する前にこれらの環境変数を設定するために、サービススクリプト、つまり/etc/rc.d/init.d/httpdを更新する必要があるかもしれません。

configure経由でビルドする際の混合エラー

configureは、いくつかのGNUツールがシステムに既にインストールされ、設定されていることを前提としており、最低限libtoolが必要です。

また、一部のシステムでは、ccとgccの設定が混在している場合があり、ネイティブCコンパイラでビルドされたApacheとgccでビルドされたjkをリンクしようとすると戸惑うかもしれません。

make処理が期待通りに動作しない場合、GNU makeであるgmakeを使用すべきです。