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

instalar java

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.

comprobar java

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

descargar instalar 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

start enable 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

verificar 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:

índice tomcat

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.

login gestor tomcat

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:

login tomcat manager dashboard

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:

gestor de host tomcat

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

instalar 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

verificar nginx

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.

verificar nginx

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.

configurar firewalld

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.

proxy inverso 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:

gestor tomcat proxy inverso

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:

gestor de host tomcat proxy inverso nginx

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.

También te podría gustar...