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/app2
etc.
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.xml
y httpd.conf
, o tal vez indicarme algunos recursos que sean más detallados?
Respuesta1
No debería necesitar realizar ningún cambio excepto server.xml
volver 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.conf
y 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/app2
asumirí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.).
- Asegúrese de que httpd-devel esté instalado
- Desempaquete el JDK real en alguna ruta, como /usr/local/jdk1.6.0_18/
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.