Redirigir peticiones de Apache a Tomcat

julio 15, 2009 at 10:54 12 comentarios

Probado en Ubuntu

Cuando tenemos un servidor de aplicaciones Java como Tomcat, por omisión las urls de las peticiones hacia él deben contener el puerto 8080 o 8180 como parte de la misma, por ejemplo: http://localhost:8080/miAplicacion

Una solución sencilla a lo anterior es tener únicamente Tomcat como servidor web (sin usar Apache) y configurarlo (en el archivo server.xml) para que el conector escuche en el puerto 80 en vez del 8080 o del 8081, esto no es adecuado ya que Tomcat no es tan robusto como Apache (en particular para páginas estáticas) y en mi caso, necesito el Apache para ejecutar la aplicación web phpmyadmin para administrar bases de datos mysql.

Lo que se hará es configurar el Apache para que delegue peticiones a aplicaciones particulares hacia el Tomcat (y que van dirigidas a este).

Es necesario tener instalado los siguientes requisitos:

  • El JDK de java (en mi caso el paquete sun-java6-jdk)
  • apache2
  • El módulo a2enmod de apache (que por lo general viene incluido con la instalación)
  • El módulo mod_jk de apache (el paquete: libapache2-mod-jk)

Primero y si no existe creamos el archivo /etc/apache2/mods-available/jk.load, este debe contener la siguiente línea:

LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so

Ahora creamos el archivo /etc/apache2/mods-available/jk.conf que contiene la siguiente información:

<IfModule mod_jk.c>
  JkWorkersFile       "/etc/apache2/workers.properties"
  JkLogFile           "/var/log/apache2/mod_jk.log"
  JkLogLevel          info
  JkLogStampFormat    "[%a %b %d %H:%M:%S %Y] "
  JkOptions           +ForwardKeySize +ForwardURICompat -ForwardDirectories
  JkRequestLogFormat  "%w %V %T"
</IfModule>

Desde consola vamos a habilitar el módulo mod_jk, nos dará un error que dice que no se encuentra el archivo workers.properties, pronto arreglaremos eso:

sudo a2enmod jk
sudo /etc/init.d/apache2 force-reload

Ahora vamos a editar el archivo /etc/apache2/sites-available/default y añadimos dentro de las etiquetas <VirtualHost *:80> <VirtualHost> lo siguiente:

ServerAdmin webmaster@localhost
ServerName localhost

JkMount /* miAplicacion

Ahora le decimos al Apache en qué puerto está escuchando el Tomcat, para ello creamos el archivo /etc/apache2/workers.properties y le añadimos lo siguiente:

worker.list=miAplicacion

# Set properties for miAplicacion
worker.miAplicacion.type=ajp13
worker.miAplicacion.host=localhost
worker.miAplicacion.port=8009

Ahora verificamos que en el archivo /usr/share/tomcat6/server.xml se
encuentre descomentada la siguiente línea:

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Ahora reiniciamos Tomcat y Apache y listo listo }:) (podemos probarlo con http://localhost/miAplicacion)

setas
Enjoy!

Entry filed under: internet, linux, servidores, sistemas operativos. Tags: , , , .

Buscar y reemplazar texto con Vim usando expresiones regulares Cómo usar Subversion

12 comentarios Add your own

  • 1. Meg@ B@yt  |  agosto 15, 2009 en 14:49

    Excelente, 100% funcional

    Responder
  • 2. Txus  |  enero 30, 2011 en 09:16

    Muy bueno, si señor.
    Llevo 2 dias mirando por internet y siguiendo al pie de la letra otros manuales y ninguno me funcionaba.
    El tuyo con el comando “sudo a2enmod jk” (que ha sido clave) me funciona perfecto.

    Muchas gracias,

    Responder
  • 3. Rayner  |  marzo 30, 2011 en 09:59

    Muy bueno.
    Una pregunta, cómo logro publicar por el host http://www.ejemplo.com una aplicación que está en la url http://localhost:8080/ejemplo?

    Saludos y mil gracias.

    Responder
    • 4. constrict0r  |  marzo 30, 2011 en 14:15

      Para quitar el puerto 8080 puedes usar este tutorial, para el nombre necesitas un nombre de dominio (como http://www.ejemplo.com), si no puedes comprar uno en joker.com o godaddy, una vez que lo tengas podrías usar un alias en el apache.

      Te aconsejo que preguntes en alguna lista de correo de software libre, yo que estoy en esta por si quieres unirte: http://groups.google.com/group/cslucr-root

      Responder
  • 5. Diego Godoy  |  marzo 30, 2011 en 11:18

    Gracias por la ayuda, exelente tutorial.

    Saludos.

    Responder
  • 6. mariana  |  mayo 4, 2011 en 20:24

    me sale este error, son los permisos, pero no quiero darle permisos a una carpeta que no es alguien me ppodria decir a cual carpeta o archivo le tengo que dar permisos.

    HERMARY:~# sudo a2enmod jk
    sudo: /etc/sudoers is mode 0777, should be 0440

    y si aplico
    HERMARY:~# sudo /etc/init.d/apache2 force-reload
    sudo: /etc/sudoers is mode 0777, should be 0440

    Responder
    • 7. constrict0r  |  mayo 5, 2011 en 09:08

      El problema es que el archivo /etc/sudoers que es dónde se listan los usuarios que pueden obtener permisos de administrador tiene permisos de escritura, lectura y ejecución para cualquiera, esto es un error de seguridad, puedes corregirlo usando el comando: chmod 0440 /etc/sudoers

      Responder
  • 8. mariana  |  mayo 4, 2011 en 22:00

    Ahora me da el error en alrchivo

    Syntax error on line 6 of /etc/apache2/sites-enabled/000-default:
    Invalid command ‘JkMount’, perhaps misspelled or defined by a module not include d in the server configuration
    failed!

    Responder
    • 9. constrict0r  |  mayo 5, 2011 en 09:05

      ¿Y el módulo se encuentra instalado?, puedes instalarlo usando aptitude install libapache2-mod-jk

      Responder
  • 10. roger  |  junio 1, 2012 en 05:53

    Muchas gracias! Me ha sido de gran ayuda.
    Solo una cosa, he tenido que modificar la siguiente linea para que funcionara:
    worker.list=miAplicacion , ajp13

    Responder
  • 11. German  |  septiembre 2, 2017 en 10:04

    Estoy intentando redirigir las peticiones al puerto 80 de apache 2 hcia tomcat 8, pero no logro darme cuenta como es la configuración, quería pedirte ayuda con esto ya que hace varios días me encuentro sin poder solucionarlo, me encuentro en fase de aprendizaje, por ese motivo es que aún no comprendo que debo hacer al respecto.

    Responder
    • 12. constrict0r  |  septiembre 2, 2017 en 10:11

      ¿Qué tienes en en el archivo: /etc/apache2/mods-available/jk.conf ?

      Responder

Dejáte un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Acerca de Mi:


Hell-Out world!!

Digo yo

Es difícil hacerse la vida fácil.

Dice Victor Frankl

Lo que importa no es tanto que la vida de una persona esté llena de dolor o de placer, sino que esté llena de sentido.

Digo yo

Que dura está la vida.

Dice Jhon Lennon

La vida es lo que pasa mientras haces planes.

Digo yo

Dónde haya un computín esté dónde esté algo comenzará en cero.

Dice Einstein

Dios no juega a los dados.

Dice Niels Bohr

Einstein no le diga a Dios lo que tiene que hacer.

Dice el Che:

Seamos realistas y hagamos lo imposible.

Dice Goethe:

Lo que no comprendemos no lo poseemos.

Digo yo:

Hay que tratar de travesear todo.

Dice Oscar Wilde:

Cualquier hombre puede llegar a ser feliz con una mujer, con tal de que no la ame.

Digo yo:

De fijo dijo eso porque era homosexual.

Artículos

julio 2009
L M X J V S D
« Jun   Ago »
 12345
6789101112
13141516171819
20212223242526
2728293031  

A %d blogueros les gusta esto: