2011-08-20

Correr Tomcat en el puerto 80 en linux CentOS

Normalmente tomcat corre en el puerto 8080.
Sin embargo los servidores web corren en el puerto estandar http 80.

Para correr tomcat en el puerto 80 tenemos 2 opciones:
  1. Correr tomcat como usuario root, lo cual no es aconsejable debido a posibles problemas de seguridad
  2. Redireccionar el puerto 80 al puerto 8080
Es posible redireccionar el puerto 80 al puerto 8080 usando el comando iptables.

iptables -t nat --append PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

Es conveniente añadir este comando al script de inicio automático de tomcat, de esta forma, el script queda:


#!/bin/sh
#
# chkconfig: 2345 20 80
# description: Tomcat
#
start()
{
    su - tomcat -c /opt/tomcat/bin/startup.sh
    iptables -t nat --append PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
}

stop()
{
    su - tomcat -c /opt/tomcat/bin/shutdown.sh
    iptables -t nat --flush
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    *)
        echo $"Usage: $0 {start|stop}"
        exit 1
esac


El comando
iptables -t nat --flush
sirve para eliminar las redirecciones que tengamos definidas en el sistema.

9 comentarios:

  1. ola que tal hipolito jimenez.... quiero agradecerte....porque eres el unico q esta subiendo el videotutorial de linux centos en español............yo pienso hacer videotutoriales de algunos cursos q se...ya e creado un blog...pero no tengo tiempo para arreglar algunas cosas...quisiera preguntarte si me das permiso para postear a mi blog... tu web y los videotutoriales q estas haciendo...especialmente de centos...espero q me pudieras responder.....muchas gracias broder

    ResponderEliminar
  2. Si, claro, no hay ningún problema.

    Espero que tengas mucha suerte con tu nuevo blog y que pronto podamos verlo.

    ResponderEliminar
  3. Hola señor Hipólito, sus tutorial es me han servido muchísimo , ahora tengo un problema y no se que hacer, tengo que configurar un servidor, esta obvio en centOS 6 tomcat y las aplicaciones en localhost funcionan a la perfección, pero no hay poder humano para poderlas abrir en otro equipo de la red, la red navega a Inter en por medio de un proxy, ese proxy debe ser el problema, espero me pueda guiar un poco para encontrar la solución. Muchas gracias

    ResponderEliminar
    Respuestas
    1. Comprueba primero que tienes conectividad con el servidor desde los clientes.
      Para esto puede tratar de hacer un telnet al servidor desde los cliente al puerto 80 (o el 8080).

      Si no es un problema de conectividad puedes tratar de acceder al servidor desde un browser del cliente donde hallas deshabilitado temporalmente el proxy en el navegador.
      Si este es el problema deberías añadir una excepción para este servidor en el proxy.

      Espero que te sea de utilidad.

      Eliminar
    2. Muy buenos dias señor Hipolito... trato de entrar a una aplicacion en java atravez de tomcat y sale la pagina en blanco

      Eliminar
  4. Hola Hipólito,
    ante todo muchas gracias por el video tutorial. La solución que pones sirve si no tienes nada en el servidor excepto el tomcat. Pero yo tengo un VPS que me tengo que gestionar (en buena hora me metí) y si hago esto que pones, TODO va al 8080 y no funciona nada más (ni cpanel, ni phpMyadmin, etc.). La solución a esto supongo que es un paquete que tiene Apache para redirigir a Tomcat, JK algo... pero las soluciones que he visto no se si valen para CentOS. Tus material es super didáctico, ¿podrías por favor poner cómo hacer lo que te comento? Para zotes...

    Gracias

    ResponderEliminar
    Respuestas
    1. Sí, esta solución no es válida cuando usas apache web server junto con tomcat.
      Intentaré explicar cómo se usa jk_mod para la integración apache - tomcat en un próximo post.

      Eliminar
  5. Ivan Chiles: Genial, me ha resuelto el problemita.

    ResponderEliminar
  6. iptables v1.4.7: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
    Perhaps iptables or your kernel needs to be upgraded. =(

    ResponderEliminar