免責事項:サーバー管理者ではありません
私はこれについて何週間も頭を悩ませてきました(それは腹立たしいことになるので、一貫してあなたを気にしないでください)。私はApache2サーバーをTomcatサーバーに接続しようとしていて、誰かが私のWebディレクトリをナビゲートしているときに* .jspまたはサーブレットに遭遇すると、Tomcatに渡されます。
Apache2.0 (port 9099)
とTomcat6 (9089)
の両方を同じボックスのDebianlennyで実行しています。
現在、mod_jk
はmod_jk.conf
の$apacheHOME/mods-enabled/
で有効になっています。内容は次のとおりです。
# Where to find workers.properties
JkWorkersFile /etc/Apache2/workers.properties
# Where to put jk shared memory
JkShmFile /var/log/at_jk/mod_jk.shm
# Where to put jk logs
JkLogFile /var/log/at_jk/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 servlet for context /examples to worker named worker1
JkMount /*/servlet/* worker1
# Send JSPs for context /examples to worker named worker1
JkMount /*.jsp worker1
私のworkers.properties
は$apacheHOME/
にあり、内容は次のとおりです。
workers.Tomcat_home=/var/lib/Tomcat6
workers.Java_home=/usr/lib/jdk1.6.0_23/db/
worker.list=worker1
ps=/
worker.worker1.port=9081
worker.worker1.Host=localhost
worker.worker1.type=ajp13
web.xml
の$tomcatHOME/conf
で、次のサーブレットが有効になっています
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.Apache.catalina.servlets.DefaultServlet</servlet-cla$
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.Apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
server.xml:
->->
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="9081" protocol="AJP/1.3" redirectPort="9088" />
mod_jk.log:
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] jk_open_socket::jk_connect.c (566): connect to 127.0.0.1:9081 failed (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_connect_to_endpoint::jk_ajp_common.c (869): Failed opening socket to (127.0.0.1:9081) (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [error] ajp_send_request::jk_ajp_common.c (1359): (worker1) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_service::jk_ajp_common.c (2194): (worker1) sending request to Tomcat failed (recoverable), because of error during request sending (attempt=1)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] jk_open_socket::jk_connect.c (566): connect to 127.0.0.1:9081 failed (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_connect_to_endpoint::jk_ajp_common.c (869): Failed opening socket to (127.0.0.1:9081) (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [error] ajp_send_request::jk_ajp_common.c (1359): (worker1) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_service::jk_ajp_common.c (2194): (worker1) sending request to Tomcat failed (recoverable), because of error during request sending (attempt=2)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [error] ajp_service::jk_ajp_common.c (2212): (worker1) Connecting to Tomcat failed. Tomcat is probably not started or is listening on the wrong port
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] jk_handler::mod_jk.c (2364): Service error=-3 for worker=worker1
ポート9081に問題があるようですが、プロセスがそれを使用していないため、正しく構成されていないと思います。私のTomcatポートは正常に動作しますが。
ickronia:/var/log/at_jk# telnet localhost 9081
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote Host: Connection refused
ickronia:/var/log/at_jk#
私の知る限り、Apache2、Tomcat、mod_jkの両方のログが緑色で表示されているため、おかしなビジネスはありません。それでも、jspに移動すると、JavaScriptが表示されるだけです。
ログやドキュメントを調べて支援を求めているにもかかわらず、問題が正確に何であるかはわかりません。私はサーブレットの世界ではかなりグリーンホーンです。
あまりにも多くの編集が行われているので、2つ答えてください。これは私の作業設定です:-
mod-jk.conf:-
JkWorkersFile /etc/libapache2-mod-jk/workers.properties
JkLogFile /var/log/Apache2/mod_jk.log
JkLogLevel info
JkMount /portal worker1
JkMount /portal/* worker1
サイト対応:-
<VirtualHost _default_:443>
JkMountCopy On
blah
blah
</VirtualHost>
worker.properties(通常はロードバランサーを通過しますが、ここでは簡略化されています):-
worker.list=worker1
worker.worker1.port=9009
worker.worker1.Host=host_name
worker.worker1.type=ajp13
Tomcat server.xml:-
<?xml version='1.0' encoding='utf-8'?>
<Server port="9005" shutdown="SHUTDOWN">
<!-- cut -->
<Service name="Catalina">
<Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="9443" />
<Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true"
keystoreFile="<path_to_keystore>.ks"
kestorePass="<password for keystore>"
maxThreads="200" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>
したがって、Tomcatは9080でhttp、9443でhttps、9009でajpをリッスンしています。
Apacheはhttpsポート443でリッスンしています。そのサーバーの/ portalコンテキストに送信されるものはすべて、ajpを介してTomcatに転送されるmod_jkworker1に送信されます。
お役に立てれば!
仮想ホストでJKMountCopyを実行したかどうかはわかりません。
/ etc/Apache2/sites-enabled/000-default-sslのubuntuボックス
<VitualHost _default_:443>
JkMountCopy On
blah
blah
</VirtualHost>
From http://Tomcat.Apache.org/connectors-doc/reference/Apache.html JkMountのディレクティブの説明を見つけると、グローバルディレクティブが次のようになっていることがわかります。 ない VirtualHostsによって継承されます。再指定する必要があります。必要なものをすべて取り込む場合は、JkMountCopyOnを使用します。
また、接続しているポートのserver.xmlにAJPコネクタが設定されていることを確認してください。リダイレクトポートはsslポートを指します。
Tomcatに含まれているサンプルから...
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
私の推測では、Tomcatのserver.xmlはポート9089にCoyoteConnectorを使用していません。これは、ajpプロトコルを話します。あなたはそれについてhttpを話しているのではないかと思います。そして、 http:// server:9089 / を押すとロードされます。
あなたはworkers.propertiesにCoyoteConnectorポートを使用させることを望むでしょう。