¿Cómo puedo configurar el uso mod_proxy_ajp con Apache y Tomcat?

¿Cómo puedo configurar el uso mod_proxy_ajp con Apache y Tomcat?

Me gustaría ejecutar Apache y Tomcat en un servidor RHEL 5 con Apache manejando aplicaciones Ruby on Rails (a través de mod_rails/Passenger) y Tomcat manejando aplicaciones Java.

En Apache, cada aplicación Rails tendrá una URL y un vhost. Las URL ya están configuradas en nuestro servidor DNS para apuntar a la máquina.

En Tomcat, cada aplicación Java tiene una URL como esta: ourserver.ourcompany.com/app1, ourserver.ourcompany.com/app2etc.

El servidor ya está en funcionamiento con Tomcat 6 ejecutándose en el puerto 80 y brindando servicio a varias aplicaciones Java. Quiero agregar Apache y reconfigurarlo. Estoy familiarizado con cómo configurar un único servidor Apache para alojar aplicaciones RoR usando Passenger. Simplemente no sé cómo hacer que Apache y Tomcat trabajen juntos de esa manera.

Encontré varios recursos y debates buscando en Google (por ejemplo,Éste) pero tienden a ser un poco incompletos e incompletos o no parecen coincidir realmente con lo que estoy tratando de hacer. El que vinculé parece ser para si desea enviar todas las solicitudes a Tomcat, no solo algunas y hacer que Apache maneje otras.

¿Alguien podría sugerir una configuración de ejemplo para server.xmly httpd.conf, o tal vez indicarme algunos recursos que sean más detallados?

Respuesta1

No debería necesitar realizar ningún cambio excepto server.xmlvolver a colocar Tomcat en los puertos predeterminados para que Apache pueda manejar el puerto 80. La mayor parte del trabajo se realizará a través de los archivos de configuración de Apache. Normalmente los dejo fuera del httpd.confy en su lugar los pego en fragmentos de configuración más pequeños bajo el <ServerRoot>/conf.d/subdirectorio.

Dado su ejemplo de ourserver.ourcompany.com/app1&, ourserver.ourcompany.com/app2asumiría una configuración similar a la siguiente:

<VirtualHost *:80>
    ServerName ourserver.ourcompany.com
    ErrorLog ...
    CustomLog ...

    [other VHost configurations]

    ProxyPass /app1 ajp://tomcat_hostname:8009/app1
    ProxyPassReverse /app1 ajp://tomcat_hostname:8009/app1

    ProxyPass /app2 ajp://tomcat_hostname:8009/app2
    ProxyPassReverse /app2 ajp://tomcat_hostname:8009/app2
</VirtualHost>

Si tiene varios servidores Tomcat agrupados detrás, es posible que desee configurar mod_balancer y mover el ajp://amod_equilibrador BalancerMember's y reemplácelo con la balancer://URL que hace referencia a la configuración del balanceador.

Respuesta2

Personalmente no me gusta mod_proxy_ajp; Cuando ejecuto Tomcat en Apache, voy directamente a instalar mod_jk (el módulo de los codificadores de Tomcat) para proporcionar la conexión AJP. Puede ajustar mod_jk de 5 maneras al domingo para ver el rendimiento de sus aplicaciones (hilos, tiempos de espera, golpes, etc.).

  1. Asegúrese de que httpd-devel esté instalado
  2. Desempaquete el JDK real en alguna ruta, como /usr/local/jdk1.6.0_18/
  3. tome la fuente "tomcat-connectors" de tomcat.apache.org y compílela

    cd tomcat-conectores-1.2.28-src/native

    ./configure --with-apxs=/usr/sbin/apxs --with-java=/usr/local/jdk1.6.0_18 --enable-prefork

    hacer

    cp apache-2.0/mod_jk.so /usr/local/lib/

Ahora debe conectarlo a su configuración de Apache en un sentido general y luego a cada host virtual según corresponda. En la configuración general agregas algo como:

LoadModule jk_module /usr/local/lib/mod_jk.so
JkWorkersFile  /usr/local/tomcat/conf/workers.properties
JkShmFile      /var/log/httpd/mod_jk.shm
JkLogFile      /var/log/httpd/mod_jk.log
JkLogLevel     error

Deberá crear el archivo trabajador.properties básico, aquí están los documentos:http://tomcat.apache.org/connectors-doc/reference/workers.htmlUno muy básico podría verse así:

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/jdk1.6.0_18
ps=/
worker.list=ajp13
worker.maintain=60
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13

Esto utilizará la configuración predeterminada del puerto 8009 de server.xml; hay un millón de botones que puedes girar aquí para ajustar el rendimiento sin cesar. Luego, en cada host virtual "montas" las aplicaciones que deseas:

<VirtualHost *:80>
 ServerName foo.bar.com
 ...other options ...

 JkMount /app1/* ajp13
 <Location "/app1/WEB-INF/">
    deny from all
 </Location>

 JkMount /app2/* ajp13
 <Location "/app2/WEB-INF/">
    deny from all
 </Location>

</VirtualHost>

Como puede ver en la parte inferior, no olvide un poco de seguridad y niegue todo acceso a su carpeta WEB-INF: la mayoría de las aplicaciones web tienen su DSN de base de datos con contraseña web.xml cuando se implementan como una bola de guerra.

información relacionada