Apache y Tomcat en Linux

Apache y Tomcat en Windows Apache y Tomcat en Windows

Tomcat es un contenedor de servlets (es lo que necesitamos para ejecutar JSP y Servlets) creado por la fundación Apache dentro del proyecto Jakarta. Aunque se puede utilizar como servidor web no está tan optimizado como el servidor web de la misma fundación, Apache. El siguiente tutorial tiene como objetivo mostrar cómo lograr que las peticiones a Apache se redirijan a Tomcat utilizando un conector (en este caso jk). A lo largo del tutorial se compilarán los paquetes a partir del código fuente, en lugar de utilizar precompilados, por lo que debería poder seguirse facilmente utilizando cualquier distribución.

Instalación del JDK

Evidentemente lo primero que necesitamos para desarrollar en Java es instalar el kit de desarrollo (JDK) que podemos descargar desde la web de Sun. A la hora de escribir este tutorial la última versión es la 5.0 Update 6. Utilizaremos la versión autoextraible (Linux self-extracting file) en lugar del paquete RPM.

su
Introducir contraseña de root
cp -p jdk-1_5_0_06-linux-i586.bin /usr/local
cd /usr/local
chmod +x jdk-1_5_0_06-linux-i586.bin
./jdk-1_5_0_06-linux-i586.bin
rm jdk-1_5_0_06-linux-i586.bin

Esto extraerá el contenido del archivo en una nueva carpeta jdk1.5.0_06 en /usr/local. Ahora basta crear la variable de entorno para indicar dónde está instalado el JDK y añadir a la variable PATH el directorio en el que se encuentran los binarios para poder ejecutarlos desde cualquier sitio. Para ello abrimos el archivo /etc/profile con nuestro editor favorito (como root) y añadimos las siguientes líneas al final:

JAVA_HOME=/usr/local/jdk1.5.0_06
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME

Actualizamos las variables de entorno:

source /etc/profile

Si todo ha salido bien al escribir javac -version deberíamos obtener el número de versión del compilador de Java. En el caso de que algo halla salido mal el sistema nos informará de que no encontró ningún ejecutable con ese nombre.

Compilar e instalar Apache

Descargamos el código fuente de la aplicación desde la web de la fundación. Descomprimimos, compilamos e instalamos:

cp -p httpd-2.2.0.tar.gz /usr/local/src/
cd /usr/local/src
tar xvzf httpd-2.2.0.tar.gz
rm httpd-2.2.0.tar.gz
cd /usr/local/src/httpd-2.2.0
./configure --prefix=/usr/local/apache --enable-module=most --enable-mods-shared=most
make
make install

Con esto habremos instalado Apache en /usr/local/apache. Vamos a probar la configuración por defecto y a intentar iniciar el servidor:

/usr/local/apache/bin/apachectl configtest
/usr/local/apache/bin/apachectl start

Si todo ha funcionado correctamente deberíamos poder abrir la URL http://localhost en un navegador y ver la página de bienvenida de Apache.

Detengamos Apache hasta que instalemos Tomcat y el conector:

/usr/local/apache/bin/apachectl stop

Compilar e instalar Tomcat

Descargamos la aplicación desde su web. En este caso no tenemos más que descomprimir el archivo en el directorio que queramos, ya que se trata de una aplicación Java.

cp -p apache-tomcat-5.5.16.tar.gz /usr/local/
cd /usr/local
tar xvzf apache-tomcat-5.5.16.tar.gz
rm apache-tomcat-5.5.16.tar.gz

De nuevo vamos a editar /etc/profile para añadir la variable de entorno CATALINA_HOME:

CATALINA_HOME=/usr/local/apache-tomcat-5.5.16
export CATALINA_HOME

Y actualizamos:

source /etc/profile

Por último ejecutamos el script de iniciación de tomcat:

/usr/local/apache-tomcat-5.5.16/bin/startup.sh

Deberías ver la página de bienvenida de Tomcat introduciendo la URL http://localhost:8080 en un navegador.

Por ahora vamos a parar Tomcat

/usr/local/apache-tomcat-5.5.16/bin/shutdown.sh

En este momento tenemos instalados ambos servidores que correrían de forma independiente, con Apache escuchando en el puerto 80 y Tomcat escuchando en el 8080.

Compilar e instalar el conector JK

Existen dos versiones del conector, JK y JK2. Aunque parezca raro la versión que nos interesa instalar es la primera, ya que la segunda está descontinuada. El código fuente se puede descargar desde la web de Tomcat.

Vamos a compilar el módulo mod_jk.so (debería colocarlo en la carpeta de módulos del servidor Apache):


cp -p jakarta-tomcat-connectors-1.2.15-src.tar.gz /usr/local/src/
cd /usr/local/src
tar xvzf jakarta-tomcat-connectors-1.2.15-src.tar.gz
rm jakarta-tomcat-connectors-1.2.15-src.tar.gz
cd jakarta-tomcat-connectors-1.2.15-src/jk/native/
./buildconf.sh
./configure --with-apxs=/usr/local/apache/bin/apxs
make
make install

Y ahora sólo falta configurarlo. Creamos un nuevo archivo workers.properties en /usr/local/apache/conf con el siguiente contenido:


workers.tomcat_home=/usr/local/apache-tomcat-5.5.16/
workers.java_home=$JAVA_HOME
ps=/
worker.list=default

worker.default.port=8009
worker.default.host=localhost
worker.default.type=ajp13
worker.default.lbfactor=1

Editamos el archivo de configuración de Apache (/usr/local/apache/conf/httpd.conf) para cargar el módulo. En la sección LoadModules añadimos:

LoadModule jk_module modules/mod_jk.so

Y al final del archivo:

JkWorkersFile "conf/workers.properties"
JkLogFile "logs/mod_jk.log"
JkLogLevel warn

JkMount /jsp-examples default
JkMount /jsp-examples/* default

JkMount es la línea que indica a Apache que solicitudes reenviar a Tomcat. En este caso llamaremos a Tomcat siempre que se intente acceder a cualquier archivo del directorio jsp-examples, donde se guardan algunos ejemplos para demostrar el uso de JSP, utilizando el protocolo definido por «default». También podríamos haber utilizado algo del estilo *.jsp para ejecutar Tomcat sólo en el caso de que los archivos terminaran con esta extensión.

Por último iniciamos Apache y Tomcat:

/usr/local/apache-tomcat-5.5.16/bin/startup.sh
/usr/local/apache/bin/apachectl start

Al introducir la URL http://localhost deberíamos ver la web de bienvenida de Apache, al introducir http://localhost:8080 la de Tomcat, y con http://localhost/jsp-examples Apache enviará la petición a Tomcat.

114 comentarios en «Apache y Tomcat en Linux»

  1. Hola a todos los genios de linux les explico al iniciar el apache sale el este error
    http:apr_sockaddr_info_get() failed for srv-net.sbn.gop.pe
    httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
    Donde srv-net.sbn.gop.pe es un nombre de host colocado de manera particular
    Que debo agregar al httpd.conf para que no salga este error
    gracias

  2. Exelente manual!, corre a la perfecion, lo instale en la Distro: Edubuntu 6.10 Edgy Eft. con:

    Apache version : httpd-2.2.4.tar.gz
    Tomcat version : apache-tomcat-5.5.23.tar.gz
    Conector: tomcat-connectors-1.2.21-src.tar.gz
    con el jdk version jdk-1_5_0_09-linux-i586.bin

    Solo felicitarte por el gran trabajo, y publicar tus conocimientos…Saludos.

  3. Hola, gracias por enseñar tus conocimientos.

    Tengo un problema respecto al reinicio de linux, cada vez que esto ocurre el servicio de tomcat no sube.
    Puedes enseñame algun truco para hacer esto.

    mi agradecimientos de antemano

    Jorge Medina A.

  4. Es la mejor guia que he podido encontra, excelente las definiciones paso a paso y la forma de ir probando es la mejor forma de saber que todo esta saliendo como uno lo espera.
    Felicitaciones por la paciencia y la dedicacion a estas cosas que a personas como yo que estamos dando nuestros primeros pasos nos vienen bien.

  5. Hola, gracias por este tutorial.

    Tengo instalado Apache Tomcat/4.1.31 y esta corriendo, pero todos los días a eso de as 10:15 (Hora Bogotá) es servicio se cae. me toca inicializarlo con las instrucción ./ startup.sh
    Revice el archivo logSoffice.log y este es la línea que me muestra:
    Wed Apr 25 05:35:42 COT 2007-Puerto-10204-ERROR DE PROCESO REMOTO AL ARRANCAR EL SERVLETcom.sun.star.connection.NoConnectException: java.net.ConnectException: Connection refused

    Que hago en esos casos para no estar todos los días pendiente del servidor?

    Gracias, espero sus comentarios….

  6. hola que tal, yo instale tengo ya todo listo pero cuando trato de reiniciar el servicio de http me manda este error

    Cannot load /etc/httpd/modules/mod_jk2.so into server: /etc/httpd/modules/mod_jk2.so: cannot open shared object file: No such file or directory

    y ya agregue la linea de LoadModule en httpd.conf

    las rutas de trabajo que tengo son
    java=/usr/java/jdk1.5.0_04/
    tomcat=/usr/local/apache-tomcat-5.5.20/

    que puede estar fallando??

  7. ¿Como haces para que una aplicacion creada por ti se ejecute en el Tomcat?

    Es decir el Deploy …

    Ayuda por favor en esto.
    Estoy usando Ubuntu 7.04 con tomcat instalado desde los repositorios

  8. A mi me pasa esto cuando intento ejecutar httpd:

    Cannot load /etc/httpd/modules/mod_jk2.so into server: /etc/httpd/modules/mod_jk2.so: cannot open shared object file: No such file or directory

    y ya agregue la linea de LoadModule en httpd.conf

    Sabe alguien como solucionarlo??

  9. Hola, aprovechando tu sabiduria, que me aconsejas para lo siguiente:

    Tengo una aplicacion PHP pero esta aplicacion hace llamadas a Tomcat, solo para algunos servicios, en especifico para reportes BIRT.

    Bueno, la aplicacion esta en un servidor, el Apache en otro y el Tomcat en un tercero.

    Las peticiones que salen de la aplicacion PHP hacia Tomcat, no se autentifican en este, y se hacen a traves de URL, en esta URL se pueden ver los nombres y valores de los parametros y eso es un hueco de seguridad, ya que si alguien copia y modifica la URL puede (sin autentificarse) ver informacion de mi BD.

    Lo que necesito es que de alguna manera las peticiones hacia Tomcat, primero pasen por Apache, para que lleven session y Tomcat valide la session. (Estando en servidores diferentes)

    Gracias y saludos.

  10. Hola, ¿cómo puedo quitar los permisos a las carpetas?
    Yo soy el único que manipula el ordenador pero aun así tengo permisos restringidos no se por qué…

  11. Tengo instalado tomcat en un servidor linux, reinicie el tomcat debido a un proceso que realice, despues de esto trato de cargar el manager o algo por el puerto 8080 y se queda pensando, mejor dicho no carga, y se queda cargar años, detengo el tomcat y lo vuelvo a iniciar pero como que no surge efecto, ¿que podra ser? Gracias

  12. Lo de las variables de entorno no consigo que me funcione, las pongo en el fichero /etc/profile tal cual me decis pero me da un fallo me pone JAVA_HOME command not found o algo asi, 🙁
    Un saludo y gracias.

    1. Si te sale error de $JAVA_HOME es pq tal vez no existe el apuntador o la variable en tu server, simplemente en lugar de que dejes eso de $JAVA_HOME pon el directorio donde está tu instalación de java, por ejemplo, en mi CentOS está en la dirección «/usr/local/jdk» y listo, debe funcionar 🙂

  13. Hola, oye segui los pasos y me funciono, pero cuando quiero instalar el conector hago esto:
    :/usr/local/src/tomcat-connectors-1.2.26-src/native# ./buildconf.sh

    y me aparece esto:
    rm autom4te.cache
    libtoolize –force –automake –copy
    ./buildconf.sh: line 23: libtoolize: command not found
    aclocal
    ./buildconf.sh: line 27: aclocal: command not found
    autoheader
    ./buildconf.sh: line 29: autoheader: command not found
    automake -a –foreign –copy
    ./buildconf.sh: line 31: automake: command not found
    autoconf
    ./buildconf.sh: line 33: autoconf: command not found
    rm autom4te.cache

    ¿eso que quiere indica?.

    Gracias.

  14. hola amigos buen tutorial, disculpen las molestias hice lo que indica el manual pero me da el siguiente error cuando trata de iniciar el tomcat.
    [root@s15291505 bin]# ./startup.sh
    Cannot find /user/local/apache-tomcat-6.0.16/bin/setclasspath.sh
    This file is needed to run this program
    [root@s15291505 bin]# ./setclasspath.sh
    The BASEDIR environment variable is not defined
    This environment variable is needed to run this program
    [root@s15291505 bin]#

    si me pudieran ayudar Versiones que instale
    apache-tomcat-6.0.16.tar.gz
    jdk-1_5_0_15-linux-amd64.bin

    gracias

  15. Hola! probe el conector con apache 2.2.9 y me funciono perfectamente, ahora estoy tratando de utilizarlo con apache 2.2.3 que instale con aptitude y me esta dando error porque dice que no consigue el servidor web alguno podria orientarme?

  16. El manual esta perfecto, sin embargo tengo un problema. Estoy montando apache y tomcat en equipos independientes pero no me funciona. Cuando hago la peticion para que apache me direccione al tomcat me da error. En el archivo error_log del apache veo el mensaje «File does not exist: /usr/local/apache2/htdocs/Aplicacion» asi que no esta direccionando hacia el equipo donde esta el tomcat. Alguna sugerencia al respecto??? Gracias!

  17. Hola CARLOS,

    lo que te pasa es q no tienes todas las aplicaciones instaladas q necesitas. tienes q instalar libtool , autoconf y ant, y tambien es posible que automake.
    Se me ocurrió pensando que me faltaba el mod_sk.so, pero no, al ver esta pagina.
    http://wiki.dspace.org/index.php/ModJk#Step_1_-_Check_if_mod_jk_is_installed
    en mi caso tambien decia q era necesario aclocal, como te pasa a tí, pero al instalar el resto de aplicaciones no protestó más.

    Yo estoy usando Open Suse 10, y lo he instalado con Yast2, te recomiendo eso antes q ponerte a compilar.

    Un saludo y suerte 🙂

  18. Hola!

    He seguido este manual y a la hora de compliar el conector de apache me sale lo siguiente:

    rm autom4te.cache
    libtoolize –force –automake –copy
    aclocal
    autoheader
    automake -a –foreign –copy
    configure.in:25: installing `scripts/build/unix/config.guess’
    configure.in:25: installing `scripts/build/unix/config.sub’
    autoconf
    rm autom4te.cache

    Lo cual no se si es un error, ya q no pone error. Y no se como arreglarlo puesto q ya he instalao los paqts ant, libtool, automake y autoconf.

    Alguien sabria decirme como arreglarlo? O tiene q dar un mensaje parecido al compilarlo?

    Gracias.

    1. Que tal, no es un error brother, me salió eso me parece al poner el comando «./buildconf.sh» si no me equivoco, luego hay q poner el comando
      «./configure –with-apxs=/usr/local/apache/bin/apxs» y ya comienza a hacer todo…

  19. Bueno ps de todo lo demas ia lo tengo bien solo se me presento un error al con el conector ps al tratar de testear me aparece un mensage como este

    OK

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, genio_122@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.

    De ante mano agradesco su ayuda

  20. Para Yeikler

    Bueno pues yo tuve el mismo problema y lo arregle con solo declarar de una manera correcta las variables de ambiente es un error que esta en la variable CATALINA_HOME y parece ser el PATH solo compruebalo

  21. Alguien me podria indicar como solucionar el problema que me ha surgido al unir tomcat con apache2?? Lo que me sucede ahora es que al poner en el navegador http://localhost/prueba.jsp que esta guardada en el webapps/Root del tomcat, en el navegador me pone que el fichero prueba.jsp no se encuentra en el servidor (en apache) y no se como solucionarlo.

    Gracias. Es urgente!!!!!!!!!!!!

  22. Hola, en la instalacion de jdk y tomcat todo fue bien. Luego en el conector hay este error :
    # ./buildconf.sh
    rm autom4te.cache
    libtoolize –force –automake –copy
    aclocal

    aclocal:configure.in:159: warning: macro `AM_PROG_LIBTOOL’ not found in library
    autoheader
    automake -a –foreign –copy
    autoconf
    configure.in:149: error: possibly undefined macro: AC_PROG_LD
    If this token and others are legitimate, please use m4_pattern_allow.
    See the Autoconf documentation.
    configure.in:155: error: possibly undefined macro: AC_LIBTOOL_DLOPEN
    configure.in:157: error: possibly undefined macro: AM_PROG_LIBTOOL
    rm autom4te.cache

    Que tengo que instalar o cual es la solución?
    Mi distribución es CENTOS 5.
    Gracias.

  23. Lorena y otros que vi por hay con el mismo erros, te faltan unas librerias por eso el error al compilar el modulo instala libtool.
    #yum install libtool

  24. hola un favor soy nueva en mi trabajo y el antiguo funcionario dejo instalado el tomcat ahora me piden lo levante por se tiene un sistema corriendo en el el proble mas es el siguiente cuando trato de inicializarlo me sale lo siguiente
    turismo@servidor:~$ /var/tomcat/bin/startup.sh
    Using CATALINA_BASE: /var/tomcat
    Using CATALINA_HOME: /var/tomcat
    Using CATALINA_TMPDIR: /var/tomcat/temp
    Using JRE_HOME: /opt/jdk
    touch: no se puede efectuar `touch’ sobre «/var/tomcat/logs/catalina.out»: Permiso denegado
    /var/tomcat/bin/catalina.sh: 340: cannot create /var/tomcat/logs/catalina.out: Permission denied
    turismo@servidor:~$ sudo /var/tomcat/bin/startup.sh
    Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
    At least one of these environment variable is needed to run this program
    turismo@servidor:~$
    podrian ayudarme a solucionarlo de antemano gracias

  25. tengo un problema cuando:

    Compilar e instalar el conector JK

    cp -p jakarta-tomcat-connectors-1.2.15-src.tar.gz /usr/local/src/
    cd /usr/local/src
    tar xvzf jakarta-tomcat-connectors-1.2.15-src.tar.gz
    rm jakarta-tomcat-connectors-1.2.15-src.tar.gz
    cd jakarta-tomcat-connectors-1.2.15-src/jk/native/
    ./buildconf.sh

    hasta aqui bien
    _____________________________________
    pero al ejecutar el comando:
    ./configure –with-apxs=/usr/local/apache/bin/apxs

    al final me da este error
    *******************************************
    checking for perl… /usr/bin/perl
    configure: error: Invalid location for apxs: ‘/usr/local/apache/bin/apxs’
    *******************************************
    y cuando hago un make:

    [root@redlinux native]# make
    make: *** No se especificó ningún objetivo y no se encontró ningún makefile. Alto.

    o cuando hago un make install:

    [root@redlinux native]# make install
    make: *** No hay ninguna regla para construir el objetivo `install’. Alto.

    Por lo demas felicitarte por la ayuda es fantastica.

    1. Q tranza…. ps el error es misma respuesta que a Eddy, Luis y no recuerdo a quien màs pero como está muy arriba te la vuelvo a poner… el error está en el directorio de «apxs» en este manual dice q es en «bin» pero en algunas distribuciones está en sbin… para más detalles checa más arriba en la pregunta de eddy 😀

    2. Je!, por cierto, se me olvidaba, obvio lo demás te da error, no puedes saltarte pasos, asi q hasta q no pases sin error el ./config…etc no podrás hacer make ni make install… 😉

  26. Cordial saludo y unas felicitaciones para el creador de este manual, hasta que por fin integre mi apache y mi tomcat…

    Estoy usando GNU/Linux OpenSuSE 11.3 X86 y mi pregunta es la siguiente, tengo mi sitio creado en jsp mediante netbeans el cual esta dentro de una carpeta que lo contiene, esa carpeta la coloco dentro de cual folder para que pueda ser accedido desde mi servidor? ya probé colocandola en el webapps de tomcat y en el htdocs de apache y nada, de antemano muchas gracias

  27. Hola veo que esta guía ya tiene su tiempo, antes de empezar a trabajar en ella me gustaría saber si es aplicable a distribuciones actuales de Ubuntu (10.10) o si tienes la guía actualizada a estas nuevas distribuciones….de igual forma muy buen trabajo…

  28. Pingback: Apache Tomcat y SysAid | Espacio de José Antonio

  29. al correr startup.sh para apache-tomcat-6.0.18
    me manda el sig error.
    Cannot find ./catalina.sh
    This file is needed to run this program

    me podrian ayudar cual es la causa por favor

  30. Norita
    Saludos

    Excelente manual solo una pregunta y cuál es la dirección de la segunda parte del tutorial que muestra cómo lograr que las peticiones a Apache se redirijan a Tomcat utilizado en CentOS/Fedora

  31. Hola tengo todo instalado java funcionando, tomcat funcionado y apache rompiéndome los huevos.

    Te cuento estoy configurando un servidor via ssh, el problema que tengo con apache, es que no puedo hacer la prueba de forma local en el navegador como en el caso del manual.

    Como puedo obtener la pagina de bienvenida de apache de forma remota desde un navegador, he intentando en vez de http://localhost/ con http://ip_del_server/ y no me devuelve nada.

    Sabrías tu que es lo que esta pasando?

    Te agradecería cualquier tipo de ayuda.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.