Ejecutar Apache Tomcat y Apache HTTPD en el puerto 80 simultaneamente
Apache Tomcat y la Web

Normalmente cuando se ejecuta un servidor de aplicaciones como Apache Tomcat, se suele vincular un connector directamente en el puerto 80. De este modo, los usuarios que visiten la aplicaciĆ³n web, podrĆ”n navegar hasta ella simplemente introduciendo el nombre de dominio en la barra de direcciones de su navegador en lugar de tener que especificar el puerto especial despuĆ©s del dominio (http://tudominio.com:8080). Si no hay opciones para vincular el puerto 80 a un contector de Tomcat (algunos sistemas operativos bloquean esta funcionalidad por seguridad), existen otras alternativas de conseguir el mismo comportamiento. Por ejemplo, establecer una redirecciĆ³n del puerto 80 al puerto 8080 (Puerto por defecto de Apache Tomcat) mediante el uso de IPTables o cualquier otra herramienta para redirigir puertos. Ambas alternativas son procedimientos sencillos, pero son bastante problemĆ”ticos en el caso que ademĆ”s de Tomcat, queramos ejecutar algĆŗn servidor web estĆ”ndar desde la misma mĆ”quina o IP.
Apache HTTP y mod_proxy
Para resolver este problema, podemos ejecutar Apache HTTPD como proxy para Apache Tomcat y redirigir el trĆ”fico al servidor de aplicaciones en funciĆ³n de una serie de reglas. En este tutorial emplearemos mod_proxy, aunque existen muchas otras opciones disponibles.

En este tutorial se asume que Apache Tomcat ya se encuentra instalado y configurado en la mƔquina con las opciones por defecto para el Connector (puerto 8080) y que Apache HTTP tambiƩn se encuentra instalado con las opciones por defecto (listener en puerto 80).
Vamos a asumir que disponemos de dos dominios distintos (tomcatserver.com y httpserver.com) apuntando a la misma direcciĆ³n IP. El usuario deberĆa de llegar al servidor de aplicaciones cuando navega hacia un dominio, y al servidor web cuando navega hacia el otro.
El primer paso es asegurarse que el fichero de configuraciĆ³n de Apache HTTP (httpd.conf) tiene el mĆ³dulo mod_proxy habilitado (lo estĆ” por defecto), asĆ que en caso de que no lo estĆ©, hay que descomentar la siguiente lĆnea:
LoadModule proxy_module modules/mod_proxy.so
Teniendo en cuenta que asumimos que hay dos dominios distintos, debemos de usar la directiva NameVirtualHost para definir dos hosts diferentes.
NameVirtualHost *:80
Seguidamente definimos el host virtual que redirigirƔ el trƔfico hacia Tomcat. En el caso en el que en Tomcat se hayan definido tambiƩn hosts virtuales (distintas aplicaciones para distintos dominios), aƱadiremos un ServerAlias por cada dominio que tambiƩn tenga que acceder a Tomcat.
1<VirtualHost *:80>
2 ServerAdmin root@localhost
3 ServerName tomcatserver.com
4 ServerAlias tomcatserver1.com
5 ServerAlias tomcatserver2.com
6 DefaultType text/html
7 ProxyRequests off
8 ProxyPreserveHost On
9 ProxyPass / http://localhost:8080/
10 ProxyPassReverse / http://localhost:8080/
11</VirtualHost>
La directiva DefaultType se emplea para establecer el header default type, para respuestas del servidor que no lo especifiquen. Este puede darse en aplicaciones web que no estĆ©n bien configuradas y es algo que Tomcat hace por defecto y omitirlo puede hacer que aparezcan errores en el momento en el que comencemos a usar la aplicaciĆ³n desde el proxy.
ProxyRequests es una medida de seguridad, la opciĆ³n off previene que el servidor sea usado como un servidor proxy normal por terceros.
ProxyPass enlazarĆ” una direcciĆ³n de un servidor remoto a una ruta local. En este caso, cada peticiĆ³n que se haga a la raĆz del servidor local se redirigirĆ” al puerto 8080.
ProxyReverse ajustarĆ” los headers del servidor remoto para que concuerden con las direcciones que el cliente espera.
Por Ćŗltimo definimos el virtual host que servirĆ” las pĆ”ginas directamente desde Apache HTTP server.
1<VirtualHost *:80>
2 ServerAdmin root@localhost
3 DocumentRoot /var/www/
4 ServerName httpserver.com
5 #Aliases
6 ServerAlias httpserver1.com
7 ...
8</VirtualHost>
Reglas del Proxy
En el ejemplo hemos asumido que hay dos dominios distintos (o mƔs) y que cada dominio apuntarƔ aun servidor u otro. mod_proxy nos permite definir reglas mƔs complejas, para redirigir trƔfico basado en otras normas como la ruta contextual.
1<VirtualHost *:80>
2 ServerAdmin root@localhost
3 DocumentRoot /var/www/
4 ServerName httpserver.com
5 #Aliases
6 ServerAlias httpserver1.com
7 ProxyPass /tomcat http://localhost:8080/
8 ...
9</VirtualHost>
Con este cĆ³digo, todo el trĆ”fico serĆ” servido por Apache HTTP, y Ćŗnicamente aquellas peticiones a la ruta local '/tomcat' se redirigirĆ”n a Apache Tomcat. Por tanto, http://httpserver.com/index.php lo servirĆ” Apache HTTP y http://httpserver.com/tomcat/index.do lo harĆ” Apache Tomcat.
Comentarios en "Ejecutar Apache Tomcat y Apache HTTPD en el puerto 80 simultaneamente"
Es complicado darte una respuesta sin ver el fichero de configuraciĆ³n.
En todo caso, si te estĆ” devolviendo un 404, es porque sĆ que ha aplicado la regla del virtual host, pero no estĆ” encontrando el contenido. Revisa bien que el DocumentRoot y el resto de parĆ”metros sean correctos. AdemĆ”s, para el DocumentRoot, deberĆas de haber definido un '
Espero que te sirva de ayuda.
Un saludo
No termino de comprender cĆ³mo estĆ” surgiendo el problema. SegĆŗn cĆ³mo hayas configurado el proxy en apache http server y los hosts en apache tomcat puede que ocurran cosas raras como la que mencionas. Asimismo, tal vez tengas las rutas de los recursos en tu CSS desalineadas con tu configuraciĆ³n (revisa que sean rutas relativas).