Cómo instalar Apache Tomcat con Nginx Reverse Proxy en AlmaLinux 9
Apache Tomcat o «Tomcat» es un contenedor de Servlets Java gratuito y de código abierto para código y aplicaciones Java. Creado originalmente por Sun Microsystem, más tarde donó el código base a la Apache Software Foundation y lo distribuyó bajo la Licencia Apache v2. Apache Tomcat proporciona un entorno de servidor HTTP «Java puro» en el que puede ejecutarse código Java. También es una implementación de las tecnologías JavaServer Pages, Java Expression Language y WebSocket.
Apache Tomcat es una de las implementaciones de Java Servlet más populares. Soporta SSL para asegurar datos sensibles como la autenticación. Además, es ligero en recursos de servidor y multiplataforma, por lo que puede instalarse en sistemas operativos tipo Unix, Windows y macOS.
En la siguiente guía, te mostraremos la instalación de Apache Tomcat con Nginx como proxy inverso en el servidor AlmaLinux 9. Instalarás Apache Tomcat mediante un paquete binario, luego instalarás Nginx y establecerás la configuración del bloque de servidor para el proxy inverso.
Requisitos previos
Antes de empezar, asegúrate de que tienes lo siguiente:
- Un servidor AlmaLinux 9.
- Un usuario no root con privilegios de administrador.
Instalación de Java OpenJDK
Antes de instalar Tomcat, debes instalar Java JDK en tu servidor AlmaLinux. Para Apache Tomcat, puedes utilizar Java JDK 11 o posterior. En este ejemplo, utilizaremos Java OpenJDK 17, que está disponible por defecto en el repositorio de AlmaLinux 9.
Para instalar OpenJDK 17, ejecuta el siguiente comando dnf. Cuando te pida confirmación, introduce y y pulsa ENTER.
sudo dnf install java-17-openjdk java-17-openjdk-devel
Una vez instalado Java OpenJDK, ejecuta el comando java de abajo para verificar tu versión de OpenJDK.
java --version
A continuación puedes ver que Java OpenJDK 17 está instalado.
Descarga de Apache Tomcat 10
Después de instalar Java OpenJDK, descargarás e instalarás Apache Tomcat manualmente mediante un paquete binario. Así que antes de empezar la instalación, visita la página de descargas de Apache Tomcat y coge el enlace de descarga.
Para empezar, ejecuta el siguiente comando para crear un nuevo usuario de sistema tomcat con el directorio raíz predeterminado /opt/tomcat.
sudo groupadd tomcat sudo adduser -r -s /usr/sbin/nologin -g tomcat -b /opt/tomcat tomcat
Ahora descarga el paquete binario de Apache Tomcat utilizando el siguiente comando wget. En el momento de escribir esto, la última versión de Apache Tomcat es la 10.1.18. Así que asegúrate de cambiar la variable VERSION con tu versión actual de Tomcat.
export VERSION=10.1.18 wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz
Una vez finalizado el proceso de descarga, crea un nuevo directorio de inicio para el usuario tomcat /opt/tomcat y extrae en él el paquete binario de Apache Tomcat.
mkdir -p /opt/tomcat sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat
Por último, ejecuta el siguiente comando para crear un enlace simbólico del directorio Tomcat a /opt/tomcat/latest. A continuación, cambia la propiedad del directorio /opt/tomcat al usuario‘tomcat‘.
sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest sudo chown -R tomcat:tomcat /opt/tomcat
Configurar Apache Tomcat como servicio
Con Apache Tomcat instalado, el siguiente paso es configurar un nuevo servicio systemd para Apache Tomcat. De esta forma, podrás gestionar fácilmente Apache Tomcat mediante la utilidad systemctl. Además, así te asegurarás de iniciar el script para Tomcat en un único lugar.
Crea un nuevo archivo de servicio systemd /etc/systemd/system/tomcat10.service utilizando el siguiente comando del editor nano.
sudo nano /etc/systemd/system/tomcat10.service
Inserta la siguiente configuración como script de servicio systemd de Apache Tomcat. En el parámetro CATALINA_OPTS, asegúrate de ajustar la memoria heap máxima para Apache Tomcat.
[Unit] Description=Tomcat 10 servlet container After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/java" Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true" Environment="CATALINA_BASE=/opt/tomcat/latest" Environment="CATALINA_HOME=/opt/tomcat/latest" Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid" Environment="CATALINA_OPTS=-Xms512M -Xmx2048M -server -XX:+UseParallelGC" ExecStart=/opt/tomcat/latest/bin/startup.sh ExecStop=/opt/tomcat/latest/bin/shutdown.sh [Install] WantedBy=multi-user.target
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora ejecuta el siguiente comando para recargar el gestor systemd y aplicar tu nuevo servicio tomcat10.
sudo systemctl daemon-reload
Ahora puedes iniciar y activar el servicio tomat10 de Apache Tomcat utilizando el siguiente comando.
sudo systemctl enable tomcat10 sudo systemctl start tomcat10
Una vez iniciado, ejecuta el siguiente comando para verificar el servicio tomcat10. Si todo va bien, deberías ver el servicio tomcat10 en ejecución.
sudo systemctl status tomcat10
Con el Apache Tomcat en ejecución, ejecuta el comando firewall-cmd que aparece a continuación para abrir el puerto 8080 que utiliza Apache Tomcat.
sudo firewall-cmd --add-port=8080/tcp
Por último, inicia tu navegador web y visita la dirección IP del servidor seguida del puerto 8080(http://192.168.5.50:8080). Si tu instalación de Apache Tomcat se ha realizado correctamente, deberías obtener la página de índice predeterminada como la siguiente:
Configuración de la autenticación en Apache Tomcat 10
Llegados a este punto, has instalado Apache Tomcat y ya se está ejecutando. En esta sección, explorarás cómo configurar y habilitar la autenticación por contraseña en Apache Tomcat.
En primer lugar, ejecuta el siguiente comando del editor nano para abrir el archivo /opt/tomcat/latest/conf/tomcat-users.xml.
sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
Añade la siguiente configuración a la sección‘<tomcat-users> … </tomcat-users>’. Y asegúrate de cambiar el nombre de usuario por defecto admin y la contraseña tomcatadmin por las nuevas credenciales.
<tomcat-users> <!-- user: admin pass: tomcatadmin --> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <user username="admin" password="tomcatadmin" roles="manager-gui, manager-script, manager-jmx, manager-status, admin-gui, admin-script"/> </tomcat-users>
Guarda y sal del archivo cuando hayas terminado.
Ahora abre la configuración para Apache Tomcat Manager y Host Manager utilizando el comando del editor nano que aparece a continuación.
sudo nano /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml
Pon un comentario ‘<!– … –>’ en ‘className=»org.apache.catalina.valves.RemoteAddrValve»‘ para permitir el acceso tanto al Gestor de Apache Tomcat como al Gestor de Anfitriones desde cualquier lugar. Consulta la configuración a continuación.
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
(Opcional) También puedes especificar direcciones IP que te permitan acceder a Tomcat Manager y Host Manager añadiendo tu dirección IP como se indica a continuación:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|CLIENT-IP-ADDRESS" />
Guarda el archivo y sal del editor cuando hayas terminado.
Con todo completado, ya puedes reiniciar el servicio tomcat10 utilizando el comando que aparece a continuación para que surta efecto. Una vez ejecutado, tu Gestor de Apache Tomcat y tu Gestor de Anfitriones se ejecutarán con autenticación de contraseña.
sudo systemctl restart tomcat10
Vuelve a tu navegador y visita la URL del Gestor de Apache Tomcat en http://192.168.5.50:8080/manager/. Cuando se te solicite la autenticación básica con contraseña, introduce tu usuario administrador de Apache Tomcat y tu contraseña, y haz clic en Iniciar sesión.
Si tienes el usuario administrador y la contraseña correctos, deberías ver el panel de control de Apache Tomcat Manager de la siguiente manera:
Por último, visita la URL del Gestor de Anfitriones de Apache Tomcat a través de http://192.168.5.50:8080/host-manager/ e inicia sesión con el usuario y la contraseña de administrador de Tomcat cuando se te solicite la autenticación. Verás el panel de control del Gestor de Anfitriones como el siguiente:
Configurar Nginx como Proxy Inverso
Llegados a este punto, ya has terminado la instalación de Apache Tomcat. El siguiente paso que harás será instalar y configurar Nginx como proxy inverso para Apache Tomcat.
Para instalar Nginx en tu servidor AlmaLinux, ejecuta el siguiente comando dnf. Escribe Y para confirmar y proceder con la instalación.
sudo dnf install nginx
Una vez instalado Nginx, crea una nueva configuración de bloque de servidor /etc/nginx/conf.d/tomcat.conf utilizando el comando editor nano.
sudo nano /etc/nginx/conf.d/tomcat.conf
Añade el siguiente bloque de servidor para configurar Nginx como proxy inverso para Apache Tomcat que se ejecuta en el puerto 8080.
server { listen 80; server_name tomcat.hwdomain.io; access_log /var/log/nginx/tomcat-access.log; error_log /var/log/nginx/tomcat-error.log; location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080/; } }
Guarda el archivo y sal del editor.
Ahora ejecuta el siguiente comando para verificar la configuración de Nginx y asegurarte de que la sintaxis es correcta.
sudo nginx -t
A continuación, ejecuta el siguiente comando systemctl para iniciar y habilitar el servidor web Nginx.
sudo systemctl start nginx sudo systemctl enable nginx
Una vez iniciado Nginx, ejecuta el siguiente comando para verificar el servicio Nginx. Si se está ejecutando, verás una salida activa (en ejecución).
sudo systemctl status nginx
A continuación puedes ver que Nginx está habilitado y en ejecución en tu servidor AlmaLinux.
Configurar Firewalld
Con Apache Tomcat ejecutándose bajo Nginx, debes abrir el puerto HTTP 0 en tu configuración firewalld.
Ejecuta el siguiente comando para abrir el servicio HTTP y recargar firewalld en tu servicio AlmaLinux.
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --reload
Ahora verifica la lista de reglas firewalld utilizando el siguiente comando.
sudo firewall-cmd --list-all
Asegúrate de que el servicio HTTP para el servidor web Nginx está activado.
Ahora vuelve a tu navegador web y visita el nombre de dominio local del bloque de tu servidor Nginx, como http://tomcat.hwdomain.io/. Si la configuración de tu proxy inverso Nginx es correcta, verás la página índice por defecto de Apache Tomcat.
Ahora navega a la URL del Administrador de Tomcat a través de http://tomcat.hwdomain.io/manager. Cuando se te solicite autenticación, introduce tu nombre de usuario y contraseña de Apache Tomcat, y haz clic en Iniciar sesión.
Si tienes el usuario y la contraseña correctos, verás el panel de control del Gestor de Apache Tomcat como el siguiente:
Por último, navega a la URL del Gestor de Anfitriones de Apache Tomcat http://tomcat.hwdomain.io/host-manager/ y verás el panel del Gestor de Anfitriones de Apache Tomcat como el siguiente:
Conclusión
¡Enhorabuena! Has instalado correctamente Apache Tomcat en un servidor AlmaLinux 9. Has instalado manualmente Apache Tomcat 10 mediante un paquete binario en el servidor AlmaLinux. Además, también has configurado Nginx como proxy inverso para tu instalación de Apache Tomcat. Y también has configurado firewalld para abrir el puerto HTTP.