Foros del Web » Programación para mayores de 30 ;) » Java »

Redirigir Apache a Tomcat

Estas en el tema de Redirigir Apache a Tomcat en el foro de Java en Foros del Web. Hola. Acabo de contratar un VPS con Knownhost (off-topic pero bastante bien de momento), y mi problema es que tengo todo montado con Tomcat y ...
  #1 (permalink)  
Antiguo 15/10/2012, 15:36
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 3
Antigüedad: 7 años
Puntos: 0
Redirigir Apache a Tomcat

Hola.
Acabo de contratar un VPS con Knownhost (off-topic pero bastante bien de momento), y mi problema es que tengo todo montado con Tomcat y claro, las urls son del tipo miapp:8080/context. Se que hay una forma de que Apache delegue a Tomcat lo que es de Tomcat y el resto lo sirva como httpd que es. No se cuantos artículos me he mirado sobre el tema, pero llego al punto en que creo que lo he hecho todo y no funciona. A ver si me podéis dar una ayudita. Se que este es un tema recurrente por lo que puede servir a otros también. Mi VPS tiene CentOS, Apache y Tomcat 7. Debo advertir que soy un novato total con Apache y en general Linux.

Primero, me bajé el binario del conector mod_jk. Debo decir que en el sitio oficial de downloads de Tomcat me fue imposible encontrar el binario del conector para Linux, así que en google encontré este: mod_jk-1.2.28-httpd-2.2.X.so (que creo que no es el último pero creo que vale).

Lo renombré a mod_jk.so y lo puse en /etc/httpd/modules

En /etc/httpd/conf he creado el fichero mod_jk.conf

El contenido del fichero es este:

# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile /etc/httpd/conf/workers.properties
# Where to put jk shared memory
JkShmFile /var/log/httpd/mod_jk.shm
# Where to put jk logs
JkLogFile /var/log/httpd/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 /micontexto to worker named worker1
#JkMount /micontexto/servlet/* worker1
# Send JSPs for context /examples to worker named worker1
#JkMount /micontexto/*.jsp worker1
JkMount /micontexto* ajp13
#Mount the webapp context

De lo de arriba deduzco que puedo redirigir todo el tráfico con el patrón /micontexto (que es mi aplicación desplegada en tomcat) a través de eso que se llama ajp13. Y también deduzco que tendría que hacerlo en este fichero para cada una de mis aplicaciones.

Seguimos, por último el workers.properties lo pongo donde indica el fichero anterior: /etc/httpd/conf/workers.properties

y tiene esta pinta:

# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=[AQUI PONGO MI IP]
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.recycle_timeout=300


Todo esto lo he hecho cogiendo retazos de unos sitios y otros, pero después de reiniciar el httpd, no me va. Es decir, que hay que seguir poniendo el dominio seguido del puerto. ¿Qué hago mal?

Muchas gracias por anticipado
  #2 (permalink)  
Antiguo 19/10/2012, 12:50
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 8 años
Puntos: 29
Respuesta: Redirigir Apache a Tomcat

Acabo de empezar a buscar lo mismo. En cuanto consiga la solución lo posteo por aquí.
  #3 (permalink)  
Antiguo 20/10/2012, 09:34
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 3
Antigüedad: 7 años
Puntos: 0
Respuesta: Redirigir Apache a Tomcat

Hola! Ya lo conseguí... a medias (leer hasta el final). Para empezar, creo que no vale cualquier binario. Así que, aunque me resultaba trabajoso porque no tengo idea del mundo Linux, me tuve que bajar los sources de la última versión para Linux Y COMPILARLA EN EL MISMO SERVIDOR en el que tengo la cuenta del cpanel con al apache. Usé este post de aquí:
http://jmginer.eu/wiki/index.php?title=Instalar_Java,_Tomcat_7_y_el_conec tor_Apache_mod_jk_en_CentOS_6

Se genera un .so, lo copias en el directorio modules, y ya está. Reinicias Apache.

Además, en mi primer post hacía referencia en el http.conf a un worker, y luego en el workers.properties ponía otro (lo que tiene ir pillando de aquí y de allí). Así tampoco iba a funcionar.

El caso es que ahora tengo funcionando la redirección desde apache al tomcat a través del protocolo ajp 1.3.

Pero no es todo. Además hay que configurar Tomcat con un VirtualServer apuntando al raíz de la cuenta de tu dominio (es la última parte del enlace que copio).

Pero, aquí viene la cosa, he tenido que poner como appbase de Tomcat para ese dominio, el directorio raíz que se me creó con una de mis cuentas en cPanel.
Es decir, tengo que desplegar toda la aplicación de Tomcat bajo /public_html/miaplicacion.

Por debajo de miaplicacion, ya encuentra recursos que maneja Tomcat sin poner el 8080 (como JSPs o JSFs)

Pero aun tengo un problema!!! El resto de recursos estáticos, no me los encuentra: imágenes, estilos....
He duplicado todo eso directamente bajo el directorio midominio/public_html, pero no hay forma. No son visibles...

Lo primero es si alguien sabe como hacer que los recursos estáticos se vean. Debe ser una chorrada.

Lo segundo es una pregunta: ¿Esto tiene que ser así? Es decir, tener que despleagar cada aplicación de Tomcat bajo su correspondiente /public_html de cada dominio? Asumiendo que quiero una aplicación por dominio claro.

Si es así, deduzco que en un entorno de producción, NUNCA se desplegarán aplicaciones bajo webapps del directorio del propio Tomcat. ¿ES así?
  #4 (permalink)  
Antiguo 20/10/2012, 13:02
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.773
Antigüedad: 14 años, 11 meses
Puntos: 454
Respuesta: Redirigir Apache a Tomcat

Hola

No puedo darte los detalles de configuracion porque son un poco liados y tendria que repasarlos y mirar. Te cuento un poco de teoria por si te aclara algo.

La idea es que determinadas o todas las peticiones a apache se redirijan a tomcat. Hay dos formas de hacerlo. Una es la que estas usando, poner el mod ajp en apache para que redirija peticiones a tomcat a traves de un puerto especifico 8009 que abre tomcat para eso. La otra opcion es mas generica y simple, apache tiene un mod proxy que redirige peticiones a cualquier otro servidor que use protocolo http, incluido tomcat por su puerto 8080.

¿que rediriges?. En algunos ejemplos se redirigen solo las peticiones a ficheros jsp. Si has hecho eso, es normal que no encuentres los estaticos. En una configuracion habitual se suele redirigir un directorio completo, que ademas coincide con el nombre de la webapp. Por ejemplo, redirigir http://dominio/miapp a tu miapp de tomcat. De esta forma encontrara todo. Para evitar problemas si usas sesiones con cookies, el directorio del dominio se debe llamar igual que la aplicacion tomcat.

Tambien es posible redirigir la raiz del dominio a la raiz de tomcat o a una aplicacion concreta, aunque en este segundo caso debes hacer un trabajo extra de configuracion por el tema que te he comentado de sesiones y cookies.

Se bueno
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 20/10/2012 a las 13:44
  #5 (permalink)  
Antiguo 21/10/2012, 11:51
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 3
Antigüedad: 7 años
Puntos: 0
Respuesta: Redirigir Apache a Tomcat

Hola, gracias por tu respuesta.

Lo que pasa es que tengo VPS con más cosas cosas que el tomcat (cuentas de cPanel y MySQL por ejemplo). Así que si mod proxy funciona como creo, lo redirigiría todo a tomcat.

con respecto a redirigir a tomcat todo el directorio, te cuento lo que tengo:

Esto en el httpd.conf de Apache

<virtualhost midominio.com>
JkMount /*.jsf ajp13
ServerName midominio.com
ServerAlias www.midominio.com
ServerAdmin [email protected]
DocumentRoot /home/midomini/public_html
ErrorLog /home/midomini/logs/error.log
CustomLog /home/midomini/logs/access.log common
JkLogFile /home/midomini/logs/jk.log
<directory /home/midomini/public_html>
Options -Indexes
</directory>
DirectoryIndex index.jsf index.html
</virtualhost>

Esto en el server.xml de tomcat

<Host name="midominio.com" appBase="/home/midomini" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="public_html" debug="0" reloadable="true"/>
<Valve className="org.apache.catalina.valves.AccessLogVal ve" directory="/home/midomini/logs" prefix="tomcat_access_" suffix=".log" pattern="common" resolveHosts="false"/>
<Alias>midominio.com</Alias>
</Host>

Y ES EN EL mod_jk.conf donde tengo TODA la aplicación redirigida:

JkMount /miapp* ajp13


¿Dónde está el fallo? Es que en el virtualhost definido en apache tengo que redirigir todas las posibles extensiones a Tomcat? Entonces para qué sirve el JkMount del mod_jk.conf?
  #6 (permalink)  
Antiguo 21/10/2012, 13:16
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.773
Antigüedad: 14 años, 11 meses
Puntos: 454
Respuesta: Redirigir Apache a Tomcat

Hola:

Con mod_proxy puedes redirigir unos directorios a unos sitios y otros a otros. En el proyecto que estoy trabajando actualmente tengo un apache como entrada desde internet con el navegador y según el directorio redirige a un tomcat, a un segundo tomcat, al panel de administración de un servidor de Openfire, al puerto de http-bind de Openfire a un panel de administración de geoserver e incluso algunos directorios los trata el mismo apache, como un par de clientes de chat (jwchat y sparkweb) instalados en ese mismo apache. Si queires, echa un ojo a la directiva <Location> de httpd.conf, dentro irían los mod-proxy de cada Location.

Los detalles de mod-jk no los controlo pero sí, seguramente tienes que decirle a apache qué debe redirigir hacia tomcat y la línea JkMount /*.jsf ajp13 del httpd.conf da la impresión de que sólo redirige los jsp del raíz (supongo que jsf es un error de copy-paste y en realidad es jsp).

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: apache, mod_jk, tomcat
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:26.