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=defaultworker.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 warnJkMount /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.
Listo ya resolvi!
como lo resolviste?
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
exelente guia para la inatalacion de tomcat
gracias por su ayuda
espero sigan haciendolo
gracias..
ATT/ camilo
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.
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.
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.
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….
hola, trabajas con orfeo? pudiste en algún momento arreglar el inconveniente?
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??
MMM… misma pregunta y misma respuesta para Eddy màs arriba en este foro… 🙂
ese instructivo esta muy bien elaborado, claro y conciso, deberias dedicarte a ello 100% y crear tu pagina web sobre estos temas
¿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
Llevaba tiempo buscando esto. Gracias.
¿Dónde quieres que te hagamos el monumento? 8D
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??
MMM… misma respuesta para Eddy y Luis más arriba en este foro 🙂
Muy buena guia, muy precisa para una configuracion basica Apache+Tomcat. Felicitaciones y gracias por tomarte la molestia de compartirla.
Bravo.
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.
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é…
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
Mira los logs de Tomcat a ver qué dicen
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.
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 🙂
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.
¿Como actualizo Tomcat? Ya agregue la variable en profile pero no se como hacer source /etc/profile
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
Excelente tutorial me sirvio de mucho, muchas gracias 🙂
Saludo.
Por que en Tomcat los servlets no arrancan?
Gracias.
excelente…. excelente….. manual
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?
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!
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 🙂
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.
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…
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
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
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!!!!!!!!!!!!
Gracias buen aporte me sirvio mucho
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.
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
Excelente ! funciona a la perfeccion.
Fantástica guía, muchas gracias.
Gracias por tu publicacion me sirvio de mucho
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
gracias 😀
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.
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 😀
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… 😉
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
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…
Muchas gracias por el tutorial es fenomenal. me ha ayudado mucho.
Enhorabuena!
Pingback: Apache Tomcat y SysAid | Espacio de José Antonio
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
exclente!!!!
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
Muy bueno. Excelnte aporte
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.