En algunas ocasiones necesitamos ver las aplicaciones que están funcionando en nuestro servidor tomcat desde Internet y en ocasiones no podemos mostrar la información directamente desde el puerto 8080. Para que esto sea posible, deberemos conectar tomcat con apache mediante un módulo llamado mod_jk.

A continuación voy a indicar cuáles son los pasos a seguir desde el principio, incluso sin tener instalados previamente apache y tomcat.

Instalación de apache y tomcat

En primer lugar, instalaremos apache y tomcat, para ello hacemos lo siguiente:

sudo apt-get install apache2

Una vez haya finalizado, podremos comprobar si se instaló correctamente intentando acceder a http://localhost. A continuación instalamos tomcat en su versión 7:

sudo apt-get install tomcat7 tomcat7-admin tomcat7-common tomcat7-docs tomcat7-examples tomcat7-user

Creamos una aplicación básica tipo helloword de la siguiente forma:

cd /var/lib/tomcat7/webapps
sudo mkdir tomcat-demo
sudo mkdir tomcat-demo/helloworld
sudo nano tomcat-demo/helloworld/index.jsp

Añadimos el siguiente código a ese fichero index.jsp

<HTML>
 <HEAD>
  <TITLE>Hello World</TITLE>
 </HEAD>
 <BODY>
  <H1>Hello World</H1>
  Today is: <%= new java.util.Date().toString() %>
 </BODY>
</HTML>

Y para comprobar que todo funciona correctamente tras la instalación, intentamos acceder al siguiente enlace:

http://localhost:8080/tomcat-demo/helloworld/

Instalación y configuración del conector mod_jk

Una vez tenemos los dos servidores funcionando, apache y tomcat, el siguiente paso a realizar es el de conectarlos entre sí, para ello debemos instalar y configurar la librería mod_jk de la siguiente forma:

sudo apt-get install libapache2-mod-jk

Tras instalarla, debemos editar el siguiente fichero con nuestro editor favorito (yo uso nano, otros frikis usan vim)

sudo nano /etc/tomcat7/server.xml

Nos dirigimos a la línea creo que 95 que contiene lo siguiente:

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

Y la descomentamos totalmente. Seguidamente creamos el fichero workers.properties para Apache:

sudo nano /etc/apache2/workers.properties

Pegamos el siguiente contenido:

# Define 1 real worker using ajp13 
worker.list=worker1 
# Set properties for worker (ajp13) 
worker.worker1.type=ajp13 
worker.worker1.host=localhost
worker.worker1.port=8009

Editamos el fichero de configuración jk para indicarle la ubicación de nuestro nuevo fichero:

sudo nano /etc/apache2/mods-available/jk.conf

Y editamos la propiedad JkWorkersFile indicando el nuevo valor /etc/apache2/workers.properties

Finalmente configuramos la URL de Apache que mostrará nuestra aplicación tomcat en nuestro servidor web apache:

sudo nano /etc/apache2/sites-enabled/000-default

Y dentro de <VirtualHost *:80> </VirtualHost *:80> agregamos JkMount /tomcat-demo* worker1 tal que así:

<VirtualHost *:80>
...
JkMount /tomcat-demo* worker1
...
</VirtualHost *:80>

Reiniciamos los servidores de tomcat y apache respectivamente:

sudo /etc/init.d/tomcat7 restart
sudo /etc/init.d/apache2 restart

y deberíamos ver lo mismo aquí
http://localhost/tomcat-demo/helloworld/
que aquí
http://localhost:8080/tomcat-demo/helloworld/

Si aplicamos esto al manual de instalación de webprotégé que publiqué hace un rato, podremos dar acceso a nuestra aplicación desde cualquier parte :).