Tomcat AJP-Connectorsはどのように機能しますか?


9

コネクタを使用してApache-webserverからTomcatにアクセスしたい。私はドキュメントに固執しました:http : //tomcat.apache.org/connectors-doc/generic_howto/quick.html私は、Debian-(Squeeze)-Systemで使用されているディレクトリ構造と一致するように少しだけ変更しました。

そこで、以下を/etc/apache2/httpd.confに追加しました:

# Load mod_jk module
# Update this path to match your modules location
#LoadModule    jk_module  libexec/mod_jk.so
# Declare the module for <IfModule directive> (remove this line on Apache 2.x)
#AddModule     mod_jk.c
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile /etc/apache2/workers.properties
# Where to put jk shared memory
# Update this path to match your local state directory or logs directory
JkShmFile     /var/log/apache2/mod_jk.shm
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile     /var/log/apache2/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel    info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount  /tomcat7/* worker1

パッケージシステム(libapache2-mod-jk)を介してmod_jkをインストールした後、モジュールのロードをコメントアウトしました。

私のworkers.propertiesは次のようになります:

# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

Tomcat 7は、Squeezeのパッケージではないため、Apacheのアーカイブから直接インストールされます。Tomcat 7は実行中で、独自のポート(8180、package-systemのtomcat6と衝突しない)で到達可能です。私が理解している限り、http:// host / tomcat7 /を含む tomcat-siteが表示されるはずです。しかし、代わりに404が表示されます。なにが問題ですか?


量子がログレベルをデバッグに設定するようにほのめかした後(ありがとう)、私はそれを行い、mod_jk.logに次のエラーメッセージを見つけました: 'jk_map_to_storage :: mod_jk.c(3585):176.9.9.55:/tomcat7のURIマップがありません/ '。私はそれをググって、http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.htmlを見つけました

したがって、httpd.confで設定されたオプションはVirtualHostsでは使用されませんでした。VirtualHostに「JkMountCopy On」を追加し、最初に(httpd 404ではなく)Tomcat 404を取得しました。ここで問題は、マウントされたまったく同じURIにアクセスしようとするため、私の場合は/ tomcat7です。代わりに、マウントとしてwebappの名前を使用しましたが、すべて問題ありません。

回答:


4

次のことを確認してください。

  1. あなたは末尾がスラッシュタイプにhttp://ホスト/ tomcat7 /、ではない のhttp://ホスト/ tomcat7
  2. あなたはAJP 1.3コネクタをポート8009でリッスンしていますserver.xml

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    

それでも機能しない場合は、デバッグをオンにしてを確認することをお勧めしますmod_jk.log


編集:

使用する場合:

JkMount  /tomcat7/* worker1

http:// host / tomcat7経由でアクセスすると、Apache 404エラーが表示されるはずです。

必要なものJkMountを仮想ホストセクションで指定できます。

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /tomcat7 worker1
    JkMount /tomcat7/* worker1
</VirtualHost>

スラッシュありとなしで試したところ、server.xmlに上記の行が含まれています。mod_jk.logには興味深い内容は含まれず、mod_jkが初期化されたというメッセージのみが含まれます。
Mnementh、2009

1
Apacheに設定JkLogLeveldebugてリロード/再起動しましたか?これを試してください:http://host/tomcat7/xx。のコンテンツ全体を投稿してくださいserver.xml
クォンタム2011

ああ、ログレベルのヒントをありがとう。
Mnementh 2011

上記で編集した私の回答を確認してください。
クォンタム

1

私も同じ問題を抱えていました。解決策はに変更JkMount /tomcat7* worker1することJkMount /your-servlet-app* worker1です。いくつでも持つことができJkMountます。

たとえば、を追加するとJkMount /manager* worker1、にアクセスできるようになりますhttp://host/manager/html

AJPとhttpの両方を試した後、この問題を見つけました。私は私の中に次のアクセスログを持っていました/var/log/tomcat7/localhost_access_log.txt

10.215.22.132 - - [04/Mar/2016:13:14:39 +0800] "GET /tomcat-demo/manager/ HTTP/1.1" 404 1009
10.215.22.132 - - [04/Mar/2016:13:26:05 +0800] "GET /tomcat-demo/manager/http/ HTTP/1.1" 404 1019
10.215.22.132 - - [04/Mar/2016:13:40:33 +0800] "GET /manager/ HTTP/1.1" 302 -
10.215.22.132 - - [04/Mar/2016:13:40:33 +0800] "GET /manager/html?org.apache.catalina.filters.CSRF_NONCE=E68B5F7E6E96D09C75A8D6854ECE9092 HTTP/1.1" 401 2474
10.215.22.132 - yz [04/Mar/2016:13:40:35 +0800] "GET /manager/html?org.apache.catalina.filters.CSRF_NONCE=E68B5F7E6E96D09C75A8D6854ECE9092 HTTP/1.1" 200 12405

最初の2つのログ行は、AJPを使用しているときに生成されました。最後の3つは、httpを使用してtomcatに直接アクセスしているときに生成されました。したがって、Apacheはjkmountプレフィックスを削除する代わりに、URL全体をtomcatに渡します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.