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. Pingback: meneame.net

  2. Pingback: Apache y Tomcat en Windows

  3. Maravilloso, en verdad muchas gracias por compartir tus conocimientos y tu experiencia.

    Ojala existieran mas instrucciones como estas.

    Mis respetos y muchas felicitaciones.

  4. hOLA mi comentario es que este tutorial es muy bueno lo voy ha aplicar, pero tengo una inquietud yo necesito trabajar en una aplicación en J2ME pero me recomendaron que utilice TOMCAT y que trabaje con NET BEANS mi interrogante es que si tengo que tranbajar con j2ME y Net Beans bajo linux o bajo windows para trabajar con el servidor TOMCAT le agradeceria que me ayudaran en esto.
    Gracias

  5. Puedes utilizar tomcat y netbeans tanto en windows como en linux, así que como prefieras Fernanda

    Pero primero pregunta si tienes que desarrollar aplicaciones J2ME o J2EE, porque lo primero se refiere a móviles, pdas, y esa clase de cosas

  6. Solo una cosa que me provoco muchos dolores de cabeza, si se utiliza otro nombre para los workers en el worker.properties:

    worker.list=w1

    tiene que usarse el mismo nombre en http.conf:

    JkMount /jsp-examples w1

    Saludos,
    Gmora

  7. todo bien, tengo un pequeño problema cuando arranco el servidor apache me sale el siguiente mensaje:
    Invalid command: ´JkMount/jps-examples´ , perhaps misspelled or defined by a module not included in the server configuration

    ya le menie mucho y sige igual, nose que hacer.

  8. Realmente es un manual excelente, me resultó muy útil y muy claro.
    Te agradezco mucho la ayuda.
    Muchos éxitos.

    Saludos,
    Danilo

  9. Saludos a todos…..

    Este tutorial es muy bueno……Felicidades…

    Tengo una duda, estoy utilizando MySQL, java servlets y tomcat. No se con exactitud la diferencia de utilizar tomcat sin el direccionamiento de apache. Tengo entendido q tomcat funge como servidor web, pero e visto en otros y en esta pagina q cuando se trabaja con linux se hace ese tipo de redireccionamiento para tomcat…… ¿que debo de hacer, que recomiendo hacer y porq ?…..

    Si alguien sabe, yo ya investigue, pero no soy experto en esta materia y quiero saber a traves de los q saben que recomiendan…..

    Saludos.. de antemano gracias…..
    (jrm)

  10. Que tal:

    Excelente esta guia de instalación, aunque supongo que algo me falló debido a que puedo acceder a apache, pero no a tomcat..

    ojala me puedan ayudar.

    Saludos.

  11. Excelente tutorial, he seguido todos los pasos de la guía, pero al iniciar tomcat esperaria ver la página localhost:8080, mas no muestra nada, manejo SUSE 10.0.

    ¿que debo hacer para que tomcat me deje ver páginas web?.

  12. Espero que mis palabras de agradecimiento sean suficientes para aquel que ha desarrollado esta guía, ¡Mil gracias!. El tiempo que has dedicado a hacer esto no tiene precio porque tambien he instalado recientemente y desde luego tu guía me resultará útil para depurar y mejorar un poco más mi instalación de tomcat que hice, de nuevo ¡Mil gracias!.

  13. exelente ayuda mis mas sinceras felicitaciones, mil gracias me ayudo full y espero poder contar contigo si se me presentace otro problema

    eddy

  14. holas a todos:

    tengo una consulta, actualmente puedo correr aplicaciones web con jsp y php con el tomcat en windows, pero resulta que mi aplicacion web necesito pasarla a linux, quisiera saber si es posible hacer esto en linux tambien o si hay una forma mas facil

    espero me ayuden

    christopher

  15. hola la yuda es muy biuena pero me sale un error cuando estoy en el conector JK digito la linea
    ./configure –with-apxs=/usr/local/apache/bin/apxs
    y me sale error del apxs alguien me podria ayudar
    ya tengo dias en esto y no me sale necesito poner a trabajar mi servidor gracias antemano

    1. Eddy, el error q te sale es pq el directorio de apxs a veces es bin y a veces es sbin, no sé si por al versión o q px, pero yo vi este mismo manual en otro blog, pero un poco diferente, y al hojear en los directorios parecidos me di cuenta de que no era sbin sino bin el directorio, en tu caso supongo q es al revés pq aqui dice q es bin, tal vez tu directorio es sbin, pero estaria bien q lo hojearas antes de modificar el comando de configuración, te recomiendo q cheques los directorios con «ls -l» pq epxs es un apuntador a una carpeta que se encuentra en otro lado ;), espero te ayude, es mi primer respuesta en este foro 😛

  16. Enhorabuena…

    Excelente guía, me fue de mucha utilidad… Agradezco tu valiosa colaboración…

    Saludos desde Montería – Colombia

  17. Hola! En verdad muchas muchas gracias por el tutorial, soy nueva en esto y en ocasiones es necesario un buen apoyo para empezar a caminar.

    Gracias!

  18. Sólo puedo repetir lo que han escrito otros: Muchas gracias por hacer una guia clara, concisa y sencilla. No es larga, no tiene florituras, términos técnicos ni palabras grandilocuentes… Pero funciona y se puede implementar en pocos minutos. Sencillez y rapidez, perfecto para (casi) todo el mundo.

    Un saludo.

  19. 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??

    gracias

    1. Que tal, por el nombre del archivo es probable que tengas q renombrar el archivo resultante del proceso de compilación o verificar tus modificaciones del httpd.conf pq el archivo debe llamarse «mod_jk.so», en el error que posteas parece ser que nombraste el archivo «mod_jk2.so» en las modificaciones al httpd.conf, énfasis en el «2», el archivo que te genera el proceso de compilación es «mod_jk.so» y así debe de ser. Espero te sirva 😉 (Segunda respuesta en el foro xD)

  20. tomcat es un servidor de aplicaciones y se puede usar como servidor web tal como apache, la idea de conectar apache y tomcat (al menos para mi) es lograr la característica de tener php y jsp en un mismo servidor web en este caso apache. y no tener que lidear con el puerto 8080 para jsp y el 80 para php, entonces conectarlos lo hace mas cómodo.
    ahora si solo se interesan por correr tomcat como servidor web independiente de apache también es posible, es bastante potente y ocupa pocos recursos, esto no quiere decir que apache conectado con tomcat tenga menor rendimiento de hecho esta forma se viene ocupando desde mucho antes de que se pudiera ocupar tomcat como un servidor web de producción independiente y confiable y aunque tomcat siempre ha sido independiente en versiones anteriores no era tan confiable como apache y se ocupaba de esa forma solo para pruebas de desarrollo. pero ahora podemos decir que tomcat solo anda muy bien y muy rápido.
    ocupar tomcat independiente o apache + tomcat dependerá de que tipo de implementación se quiera. como dije antes para mi es mas cómodo conectarlos para tener jsp y php de forma «simultanea».

  21. Tengo un problema tengo instalado centos 4.4 y cuando llego al proceso de instalacion del conector al configurar el conector, no tengo la ruta /usr/local/apache/bin, es necesario configurar con apxs que significa ello. pues tengo configurado el apache que viene con centos y normal me sale el tomcat en el puerto 8080 pero el conector como lo configuro. o debo instalar el apache de nuevo

    Gracias por la consulta

  22. apxs es una aplicación para extender la funcionalidad de apache. si quieres compilar el conector lo vas a necesitar, claro. Prueba a ver si está en el paquete apache-dev, apache-devel o algo similar.

    Si no siempre puedes ver si tienes el módulo ya compilado disponible para tu plataforma en algún sitio. Ubuntu 6.06 lo tiene en los repositorios, por ejemplo.

    Por otro lado, si no sabes dónde está tal o cual ejecutable puedes usar el comando «whereis aplicacion»

  23. Hola que tal, todo salio bien, pero para probar con la base de datos mysql por el shell me sale el siguiente error:

    [root@linux packBean]# java TestConexion
    Exception in thread «main» java.lang.NoClassDefFoundError: TestConexion
    at gnu.java.lang.MainThread.run(libgcj.so.7rh)
    Caused by: java.lang.ClassNotFoundException: TestConexion not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:/usr/local/apache-tomcat-6.0.2/lib/connector.jar], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
    at java.net.URLClassLoader.findClass(libgcj.so.7rh)
    at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.7rh)
    at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
    at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
    at gnu.java.lang.MainThread.run(libgcj.so.7rh)

    He intentado por todo lado solucionar este error, pero nada..

  24. Buenas

    El tutorial realmente esta genial.

    Ahora lo interesante seria añadirle PHP y MySQL, alguien sabria como realizar esto, porque segun creo hay que compilar php antes de apache, para despues compilar apache con soporte php… alguien podria indicar como se haria?

    Y ya puestos a pedir, 😀 añadirle el mod apache::asp

  25. Hola el tutorial esta muy bueno.. Yo me estoy iniciando en linux y tengo instalado Ubuntu 5.10. He hecho todo al pie de la letra pero cuando voy a comenzar el apache
    root@asl52:/usr/local/apache/bin# apachectl -k start

    me da este error
    bash: apachectl: command not found

    NO entiendo por que? Ya revise la carpeta y si esta el apachectl alli.
    Alguien puede ayudarme?

  26. cuando voy a comenzar el apache
    root@asl52:/usr/local/apache/bin# apachectl -k start

    me da este error
    bash: apachectl: command not found

    Ejecútalo así:
    ./apachectl -k start

  27. Ok ya lo hice ahora…
    root@asl52:/bin# cd /usr/local/apache/bin
    root@asl52:/usr/local/apache/bin# ./apachectl -k start

    httpd: Could not reliably determine the server’s fully qualified domain name, using 192.168.1.52 for ServerName
    root@asl52:/usr/local/apache/bin#

    Que es eso?

  28. httpd: Could not reliably determine the server’s fully qualified domain name, using 192.168.1.52 for ServerName

    Sólo indica que Apache no ha encontrado el parámetro ServerName en el archivo de configuración (httpd.conf), que es el que le indica el nombre de dominio de tu máquina, así que va a asumir por defecto que vas a acceder al servidor usando la IP de la máquina (192.168.1.52). En principio el servidor debería estar corriendo ya sin problemas y deberías ver la página de presentación de apache escribiendo http://192.168.1.52, http://localhost o http://127.0.0.1 en el navegador

    De todas formas, si sólo estás instalando Apache para jugar con él en local y no quieres que te saque ese mensaje puedes añadir «ServerName localhost» en ese archivo de configuración (de hecho creo que esa línea está por defecto pero comentada)

  29. Ojala fuera para jugar.. Estoy instalando apache para luego instalar Tomcat y usarlos en mi trabajo para trabajar con jsp… Gracias! Ya funciono!!!! It works!!! Gracias gracias!

  30. Soy yo de nuevo.. Ahora necesito detener el servidor y tampoco lo hace…
    Coloco /usr/local/apache/bin/apachectl stop y sigue corriendo.
    Si no es mucha molestia puedes decirme que hacer please?

  31. Ahora necesito detener el servidor y tampoco lo hace…
    Coloco /usr/local/apache/bin/apachectl stop y sigue corriendo.

    ¿Qué te responde cuando lanzas el comando?
    De todas formas siempre puedes matar el proceso usando el comando kill

  32. Hola a todos:
    He seguido el tutorial paso por paso y el archivo de logs de Apache me dice que Tomcat está escuchando en un puerto erróneo.¿alquien tiene alguna idea?
    GRACIAs

  33. Hola cuando instale apache levantaba bien pero cuando agregue las lineas
    JkWorkersFile «conf/workers.properties»
    JkLogFile «logs/mod_jk.log»
    JkLogLevel warn

    JkMount /jsp-examples default
    JkMount /jsp-examples/* default
    en el archivo de configuracion de apache me da este error
    Syntax error on line 418 of /usr/local/apache2/conf/httpd.conf:
    Invalid command ‘JkMount/jsp-examples’, perhaps misspelled or defined by a module not included in the server configuration

    y ahora no inicia apache.
    Please help!!!!

Deja un comentario

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