web-dev-qa-db-ja.com

Tomcat6をApache2に接続する

免責事項:サーバー管理者ではありません

私はこれについて何週間も頭を悩ませてきました(それは腹立たしいことになるので、一貫してあなたを気にしないでください)。私はApache2サーバーをTomcatサーバーに接続しようとしていて、誰かが私のWebディレクトリをナビゲートしているときに* .jspまたはサーブレットに遭遇すると、Tomcatに渡されます。

Apache2.0 (port 9099)Tomcat6 (9089)の両方を同じボックスのDebianlennyで実行しています。

現在、mod_jkmod_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が表示されるだけです。

ログやドキュメントを調べて支援を求めているにもかかわらず、問題が正確に何であるかはわかりません。私はサーブレットの世界ではかなりグリーンホーンです。

4
StudentKen

あまりにも多くの編集が行われているので、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に送信されます。

お役に立てれば!

1
Decado

仮想ホストで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" />
1
Decado

私の推測では、Tomcatのserver.xmlはポート9089にCoyoteConnectorを使用していません。これは、ajpプロトコルを話します。あなたはそれについてhttpを話しているのではないかと思います。そして、 http:// server:9089 / を押すとロードされます。

あなたはworkers.propertiesにCoyoteConnectorポートを使用させることを望むでしょう。

1
becomingwisest