¿Cómo hago para que funcionen los conectores AJP de Tomcat?

9

Quiero acceder a Tomcat a través del servidor web Apache utilizando conectores. Me pegué a la documentación: http://tomcat.apache.org/connectors-doc/generic_howto/quick.html Solo lo modifiqué un poco para que coincida con la estructura de directorios utilizada en mi Debian- (Squeeze) -System.

Entonces agregué lo siguiente a /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

Comenté la carga del módulo, porque eso ya sucede, después de instalar mod_jk a través del paquete-sistema (libapache2-mod-jk).

Mis trabajadores.propiedades se ven así:

# 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 se instala directamente desde el archivo de Apache, porque no es un paquete en Squeeze. Tomcat 7 se está ejecutando y es accesible bajo su propio puerto (8180, para no chocar con tomcat6 del sistema de paquetes). Según tengo entendido, debería ver ahora el sitio tomcat con http: // host / tomcat7 / . Pero obtengo un 404 en su lugar. ¿Qué está mal?


Después de que Quanta sugirió establecer el nivel de registro para depurar (gracias) lo hice y encontré el siguiente mensaje de error en mod_jk.log: 'jk_map_to_storage :: mod_jk.c (3585): falta el mapa de uri para 176.9.9.55:/tomcat7 / '. Busqué en Google y encontré http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html

Por lo tanto, las opciones establecidas en httpd.conf no se usaron en VirtualHosts. Agregué 'JkMountCopy On' a mi VirtualHost y obtuve primero un Tomcat 404 (en lugar del httpd 404). Problema aquí, que intenta acceder exactamente al mismo URI montado, así que en mi caso / tomcat7. En su lugar, usé el nombre de la aplicación web como montaje y todo está bien para mí.

Mnementh
fuente

Respuestas:

4

Asegúrate de eso:

  1. escribe una barra diagonal http: // host / tomcat7 / , no http: // host / tomcat7 .
  2. tiene un conector AJP 1.3 escuchar en el puerto 8009 en server.xml:

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

Si todavía no funciona, le sugiero que active la depuración y eche un vistazo mod_jk.log.


EDITAR:

Si utiliza:

JkMount  /tomcat7/* worker1

y acceda a través de http: // host / tomcat7 , estoy seguro de que obtendrá el error Apache 404.

Puede especificar JkMounten una sección de host virtual lo que desea:

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /tomcat7 worker1
    JkMount /tomcat7/* worker1
</VirtualHost>
quanta
fuente
Intenté con y sin la barra diagonal y el server.xml contiene la línea mencionada. El mod_jk.log no contiene algo interesante, solo el mensaje, que mod_jk se inicializó.
Mnementh
1
¿Estableció y volvió JkLogLevela debugcargar / reiniciar Apache? Prueba esto: http://host/tomcat7/xx. Publica todo el contenido de server.xml.
quanta
Ah, gracias por la pista con el nivel de registro.
Mnementh
Por favor revisa mi respuesta editada arriba.
quanta
1

Yo tuve el mismo problema. La solución es cambiar JkMount /tomcat7* worker1a JkMount /your-servlet-app* worker1. Puedes tener tantos JkMountcomo quieras.

Por ejemplo, después de agregar JkMount /manager* worker1, podrá accederhttp://host/manager/html

Descubrí este problema después de haber intentado con AJP y http. Tuve el siguiente registro de acceso en mi/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

Las dos primeras líneas de registro se generaron mientras uso AJP. Los últimos tres se generaron mientras uso http para acceder directamente a tomcat. Entonces, apache pasa la URL completa a tomcat, en lugar de eliminar el prefijo jkmount.

Wu Yongzheng
fuente