- Configuración de seguridad en Tomcat
Tras la instalación inicial de Tomcat, es crucial realizar ajustes de seguridad. Elimine todos los archivos de aplicaciones del directorio webapps para prevenir accesos no deseados.
rm -rf /srv/apache-tomcat/webapps/*
A continuación, modifique el archivo de usuarios para anular los permisos predeterminados. Edite conf/tomcat-users.xml dejando el contenido básico, como se muestra a continuación:
<?xml version='1.0' encoding='utf-8'??>
<tomcat-users>
</tomcat-users>
Para ocultar la versión de Tomcat, localice el archivo JAR en $TOMCAT_HOME/lib/catalina.jar. Extraiga su contenido, modifique ServerInfo.properties vaciando los campos de versión y fecha, y vuelva a empaquetarlo. Reinicie el servidor después.
Además, en conf/server.xml, asigne un valor vacío o personalizado al atributo server en los conectores para enmascarar el tipo de servicio. Deshabilite el despliegue automático de WAR estableciendo unpackWARs="false" autoDeploy="false" en el contexto de la aplicación. Finalmente, restrinja la escucha a una dirección IP interna específica, por ejemplo:
<connector address="192.168.1.100" port="8080"></connector>
- Ajuste de parámetros de rendimiento y concurrencia
Los parámetros clave para gestionar la concurrencia inclyuen maxThreads, que define el número máximo de hilos simultáneos (predeterminado 200), y acceptCount, que establece la cola de solicitudes en espera (predeterminado 100). Su interacción determina el comportamiento bajo carga:
- Si los hilos activos son menores que
maxThreads, se crea un hilo nuevo por solicitud. - Al alcanzar
maxThreads, las solicitudes adicionales se encolan hasta el límite deacceptCount. - Superado
acceptCount, se rechazan nuevas conexiones.
Para configurar maxThreads, considere la naturaleza de las operaciones: si son intensivas en CPU, reduzca el valor para minimizar la competencia por recursos; si dependen de E/S o bases de datos, aumente el valor para manejar más solicitudes en paralelo. Sin embargo, valores excesivamente altos (por encima de 2000) pueden degradar el rendimiento debido al tiempo de conmutación de hilos. Ajuste acceptCount según los patrones de tráfico, y vincúlelo con los parámetros de memoria JVM.
En los conectores, otros parámetros relevantes son:
minSpareThreads: hilos mínimos en espera.maxSpareThreads: hilos máximos inactivos.enableLookups: desactívelo (false) para mejorar el rendimiento.connectionTimeout: tiempo de espera para conexiones.
Para optimizar la transferencia de datos, habilite la compresión con configuraciones como:
compression="on"
compressionMinSize="1024"
compressableMimeType="text/html,text/xml,text/css,text/javascript"
La compresión reduce el ancho de banda en un 40% aproximadamente, pero incrementa la carga del servidor. Considere delegar esta tarea a un proxy como Nginx.
- Optimización de la memoria JVM
La configuración de memoria se realiza mediante las opciones de Java en el script de inicio catalina.sh. Defina la variable JAVA_OPTS para ajustar los parámetros de la máquina virtual.
Ejemplo de configuración:
JAVA_OPTS="-Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=256m"
Aquí, -Xms establece la memoria inicial, -Xmx la máxima, y -XX:PermSize y -XX:MaxPermSize gestionan el espacio de metadatos. Ajuste estos valores según los recursos disponibles del servidor. Reinicie Tomcat para aplicar los cambios.
- Ajustes del sistema operativo y red
Para entornos Linux, optimice los parámetros del kernel editadno /etc/sysctl.conf. Agregue las siguientes líneas para mejorar el rendimiento de red y la gestión de conexiones:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
Aplique los cambios ejecutando sysctl -p. Estas optimizaciones aumentan el límite de coneixones y reducen los tiempos de espera, esenciales para despliegues de alta concurrencia.