Aprende a administrar Apache Tomcat
Instalar Apache Tomcat
- Aprende a instalar apache tomcat en Linux siguiendo los pasos correctos.
- Aprende a instalar apache tomcat en Windows con un post explicado.
Directorios de Apache Tomcat
En el posts Carpetas y archivos de Apache Tomcat: estructura completa explico a detalle los archivos mas importantes.
Preguntas que vamos a responder en este post
¿Cómo configurar Apache Tomcat?
Configurar Apache Tomcat consiste en ajustar los archivos ubicados en el directorio conf/ para adaptar el servidor a las necesidades de la aplicación. La configuración básica incluye cambiar los puertos de escucha, crear usuarios administradores, configurar aplicaciones web, definir hosts virtuales y habilitar conexiones seguras mediante HTTPS
Los principales archivos de configuración son:
- server.xml: configuración del servidor y sus conectores.
- tomcat-users.xml: usuarios y roles.
- context.xml: configuración global de las aplicaciones.
- web.xml: configuración predeterminada de las aplicaciones web.
- logging.properties: configuración de los registros del servidor.
Después de modificar cualquiera de estos archivos, es necesario reiniciar Tomcat para que los cambios tengan efecto.
¿Qué hace el archivo server.xml?
El archivo server.xml es el núcleo de la configuración de Apache Tomcat. En él se define cómo funciona el servidor y cómo atiende las solicitudes HTTP y HTTPS.
Entre sus funciones principales se encuentran:
- Configurar los puertos de escucha.
- Definir conectores HTTP y HTTPS.
- Configurar el motor de procesamiento (Engine).
- Administrar hosts virtuales.
- Configurar aplicaciones mediante Context.
- Definir componentes como Valves y Realms.
Es el archivo que más se modifica al personalizar una instalación de Tomcat.
¿Cómo cambiar el puerto 8080?
Para cambiar el puerto predeterminado de Tomcat:
Abre el archivo: TOMCAT_HOME/conf/server.xml
Localiza el conector HTTP:
<Connector port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Cambia el valor del atributo port.
Por ejemplo:
<Connector port="9090"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Guarda el archivo y reinicia Tomcat.
Ahora el servidor estará disponible en: http://localhost:9090
¿Cómo configurar usuarios en Tomcat?
Los usuarios se configuran en el archivo: conf/tomcat-users.xml
Puedes crear un usuario administrador de la siguiente manera:
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user
username="admin"
password="MiPasswordSegura"
roles="manager-gui,admin-gui"/>
Después de guardar los cambios, reinicia Tomcat.
Con este usuario podrás acceder tanto al Tomcat Manager como al Host Manager.
¿Cómo entrar al Tomcat Manager?
Una vez creado un usuario con el rol manager-gui, abre un navegador y accede a: http://localhost:8080/manager/html
Introduce el nombre de usuario y la contraseña configurados en tomcat-users.xml.
Desde el Tomcat Manager podrás:
- Desplegar aplicaciones WAR.
- Iniciar aplicaciones.
- Detener aplicaciones.
- Recargar aplicaciones.
- Eliminar aplicaciones.
- Consultar el estado del servidor.
¿Cómo desplegar un archivo WAR?
Apache Tomcat permite desplegar aplicaciones Java empaquetadas en formato WAR de diferentes maneras.
Desde el Tomcat Manager
- Accede al Manager.
- Busca la sección Deploy.
- Selecciona el archivo WAR.
- Haz clic en Deploy.
Copiando el archivo WAR
También puedes copiar el archivo directamente en: webapps/
Por ejemplo: webapps/mi-aplicacion.war
Si el despliegue automático está habilitado, Tomcat descomprimirá el archivo y publicará la aplicación automáticamente.
El corazón de Tomcat
Toda la configuración gira alrededor de unos pocos archivos ubicados en conf/
| Archivo | Función |
|---|---|
| server.xml | Configuración del servidor |
| web.xml | Configuración global de aplicaciones |
| context.xml | Configuración de Contextos |
| tomcat-users.xml | Usuarios del administrador |
| logging.properties | Logs |
| catalina.properties | Propiedades internas |
server.xml
Es el archivo más importante. Revisa documentación oficial https://tomcat.apache.org/tomcat-9.0-doc/config/index.html
Componentes principales
Este archivo está estructurado en una jerarquía de etiquetas XML que representan los distintos módulos de Tomcat:
<Server>: Es el elemento raíz que representa a toda la instancia de Tomcat.
<Service>: Agrupa uno o más<Connector>con un solo motor o contenedor<Engine>.<Connector>: Define los puertos y protocolos (como HTTP en el puerto 8080 o AJP en el 8009) por donde el servidor recibe las peticiones de los usuarios.<Engine>: Es el contenedor que procesa todas las peticiones recibidas por los conectores.<Host>: Permite configurar hosts virtuales (ej.://tuservidor.com) para alojar diferentes dominios en una sola instancia de Tomcat.<Context>: Define una aplicación web específica y su ruta (path) en el servidor.
Server
<Server port="8005" shutdown="SHUTDOWN">
El puerto 8005 solamente recibe el comando de apagado, puedes cambiarlo: 8005, 9005, 10005.
Service
Agrupa conectores y motores. Normalmente existe uno.
<Service name="Catalina">
Connector
Es donde Tomcat escucha peticiones.
<Connector
port="8080"
protocol="HTTP/1.1"/>
Aquí llegan las peticiones del navegador. http://localhost:8080
Puedes modificar
- Puerto
- port="9090"
- Timeout
- connectionTimeout="20000"
- Número máximo de conexiones
- maxConnections="8192"
- Número máximo de hilos
- maxThreads="300"
- Mínimos
- minSpareThreads="20"
- Compresión
- compression="on"
- compressionMinSize="2048"
- Muy usado en producción.
Engine
Representa el motor de Servlet.
<Engine
name="Catalina"
defaultHost="localhost">
Dentro del Engine existen Hosts.
Host
Representa un dominio.
<Host
name="localhost"
appBase="webapps"
unpackWARs="true"
autoDeploy="true">
Context
Cada aplicación posee un Context.
<Context
path="/blog"
docBase="/apps/blog"/>
Aquí puedes configurar:
- Sesiones
- Cookies
- Recursos
- DataSources
- Variables
web.xml
Es el Deployment Descriptor (descriptor de despliegue) de una aplicación Java EE (Jakarta EE).
Su función es decirle al contenedor (Tomcat):
- Cómo iniciar la aplicación.
- Qué servlets existen.
- Qué URLs atienden.
- Qué filtros ejecutar.
- Cómo manejar errores.
- Cómo administrar sesiones.
- Qué páginas son de bienvenida.
- Qué restricciones de seguridad aplicar.
Antes de las anotaciones (@WebServlet, @WebFilter, etc.), prácticamente toda la configuración se hacía en este archivo.
¿Dónde se encuentra?
El global de Tomcat
TOMCAT_HOME/
│
├── conf/
│ └── web.xml
Este afecta a todas las aplicaciones.
El de una aplicación
MiAplicacion/
WEB-INF/
web.xml
Solo afecta a esa aplicación.
¿Qué contiene normalmente?
Un web.xml puede contener elementos como estos:
<web-app>
<display-name>Mi Aplicación</display-name>
<context-param/>
<listener/>
<filter/>
<filter-mapping/>
<servlet/>
<servlet-mapping/>
<session-config/>
<welcome-file-list/>
<error-page/>
<security-constraint/>
</web-app>
Cada sección tiene una función específica.
display-name
Es únicamente el nombre descriptivo de la aplicación.
<display-name>Mi Blog</display-name>
No afecta el funcionamiento.
Context Parameters
Permiten definir variables globales.
<context-param>
<param-name>empresa</param-name>
<param-value>Apuntes DevOps</param-value>
</context-param>
Desde Java puedes obtenerla mediante:
ServletContext context = getServletContext();
String empresa =
context.getInitParameter("empresa");
Es útil para almacenar información de configuración compartida.
Listener
Los listeners escuchan eventos del ciclo de vida de la aplicación.
Por ejemplo:
- cuando Tomcat inicia la aplicación;
- cuando la aplicación se detiene;
- cuando un usuario crea una sesión;
- cuando una sesión expira.
Configuración:
<listener>
<listener-class>
com.miempresa.StartupListener
</listener-class>
</listener>
Muy usado para cargar configuraciones al arrancar.
Filter
Los filtros interceptan las peticiones antes de llegar al servlet.
Cliente
↓
Filtro
↓
Servlet
↓
Respuesta
Ejemplo:
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>
com.miempresa.AuthFilter
</filter-class>
</filter>
Luego se indica sobre qué rutas actúa:
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Algunos usos habituales son:
- autenticación;
- autorización;
- CORS;
- compresión;
- registro de peticiones (logging);
- medición de tiempos de respuesta.
Servlet
Aquí se registran los servlets.
<servlet>
<servlet-name>HomeServlet</servlet-name>
<servlet-class>
com.blog.HomeServlet
</servlet-class>
</servlet>
Después se asocia a una URL.
<servlet-mapping>
<servlet-name>HomeServlet</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>
Entonces:
http://localhost:8080/home
ejecutará ese servlet.
Welcome File
Define la página inicial.
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
Cuando alguien accede a:
http://localhost:8080/
Tomcat busca en este orden:
index.jsp
↓
index.html
↓
default.jsp
El primero que encuentre será el que muestre.
Session Configuration
Permite configurar las sesiones HTTP.
<session-config>
<session-timeout>30</session-timeout>
</session-config>
Después de 30 minutos sin actividad, la sesión expira.
También se pueden definir propiedades de las cookies de sesión.
Error Pages
Puedes personalizar las páginas de error.
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
Y también por excepción:
<error-page>
<exception-type>
java.lang.Exception
</exception-type>
<location>/error.jsp</location>
</error-page>
Así evitas mostrar el error estándar de Tomcat.
Seguridad
Puedes proteger partes de la aplicación.
<security-constraint>
<web-resource-collection>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
</security-constraint>
Y exigir un rol determinado:
<auth-constraint>
<role-name>ADMIN</role-name>
</auth-constraint>
Solo los usuarios con ese rol podrán acceder.
Usuarios de Tomcat
Todo está en conf/tomcat-users.xml
Inicialmente viene vacío.
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user
username="admin"
password="123456"
roles="manager-gui,admin-gui"/>
</tomcat-users>
Reinicias Tomcat.
Ahora podrás entrar. http://localhost:8080/manager/html
Roles
Tomcat utiliza permisos.
Los principales son:
| Rol | Descripción |
|---|---|
| manager-gui | Administrador Web |
| manager-script | API REST |
| manager-jmx | JMX |
| manager-status | Estado |
| admin-gui | Host Manager |
| admin-script | Host Manager API |
Manager Application
Es la consola web.
Normalmente está aquí: webapps/manager/
Ingresas: http://localhost:8080/manager/html
Verás:
- Lista de aplicaciones
- Estado
- Sesiones
- Memoria
- Threads
Qué puedes hacer
Deploy
Subir un WAR: miapp.war
Undeploy
Eliminar la aplicación.
No elimina el WAR si está fuera de webapps.
Reload
Recarga una aplicación.
No reinicia Tomcat.
Muy útil.
Start
Inicia una aplicación.
Stop
Detiene una aplicación.
Expire Sessions
Cerrar sesiones activas.
Muy útil para mantenimiento.
Server Status
Muestra información muy útil.
Encontrarás:
- JVM
- Memoria
- Threads
- Requests
- Tiempo
- CPU
- Conectores
Aquí puedes detectar problemas de rendimiento.
Host Manager
URL: http://localhost:8080/host-manager/html
Permite administrar Hosts.
Puedes crear: empresa.com, blog.com, api.com
Sin editar XML manualmente.
Logs
Los registros se encuentran en: logs/
| Archivo | Contenido |
|---|---|
| catalina.out (Linux) | Salida estándar de Tomcat |
| catalina..log | Eventos del servidor |
| localhost..log | Eventos del host localhost |
| manager..log | Acciones del Manager |
| host-manager..log | Acciones del Host Manager |