tomcat

Activar la compresión Gzip en tomcat

Activar la compresión Gzip en Tomcat

Lo primero de todo vamos a ver que es la compresión gzip en servidores. Los servidores web tienen la opción de enviar el contenido que estan sirviendo comprimido, para reducir el tamaño de los datos. Por lo que se necesitará menos ancho de banda y las trasferencias tardaran menos tiempo (obteniendo el usuario la páguina web más rápido). Aunque esto se obtiene a costa de aumentar un poco el uso de la CPU (utilizado para hacer la compresión).

No todo el contenido es recomendable servirlo comprimido ya que se elevaría demasiado el uso de la CPU. Es recomendable comprimir solo contenído de texto, como por ejemplo los css, javascript, html, xml, ...

Una vez acabada la explicación, vamos con la práctica. Para activar la compresión Gzip en tomcat, tendremos que editar el fichero que se encuentra en la ruta /conf/server.xml (dentro de la carpeta de nuestro tomcat) y añadir a todos los conectores http que tengamos los siguientes atributos (para comprimir html, xml, css y javascript y no comprimir para los motores gozilla y traviata):

compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/css,text/javascript"

El significado de cada uno de los parámetros es el siguiente:

  • compression: Sirve para activar al compresión.
  • compressionMinSize: Tamaño minimo para comprimir.
  • noCompressionUserAgents: Le dice para que clientes no tiene que usar la compresión (puedes decirle que no haga compresión para un navegador determinado).
  • compressableMimeType: con este parámetro le indicamos el contenido que queremos que se sirva comprimido (aquí teneis una lista de los posibles mime type).

Por ejemplo, si tenemos un conector del tomcat en el puerto 80, quedaría así:

<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/css,text/javascript"/>

Los conectores del protocolo ajp no me ha quedado claro si no se puede usar compressión con ellos o como es un protocolo binario no hace falta la compresión porque ya la hace.

temas: 

Instalar dos tomcats en la misma máquina como servicios

 Dos tomcats en la misma máquina

Introducción

Instalar dos tomcats en la misma máquina como servicios no es una tarea facil a simple vista, ya que hay que seguir unos pasos en los cuales hay que modificar el registro de windows. Los pasos a seguir son los siguientes:

  • Instalar el primer tomcat como servicio de windows.
  • Modificar unos datos del servicio.
  • Modificar unos datos del monitor del tomcat instalado.
  • Modificar el desinstalador del tomcat instalado.
  • Cambiar los puertos del tomcat.
  • Instalar el segundo tomcat como servicio.

Ahora os explico los pasos más detalladamente.

Instalación

Se realiza la instalación de primer tomcat marcando la opción tomcat/service.

Una vez realizada la instalación se va a modificar el registro del sistema, para esto hay que ejecutar la aplicación regedit. Tendremos que ir al menú inicio, darle a ejecutar y escribiremos regedit y le daremos al enter. Ahora haremos los siguientes cambios:

Modificamos el servicio

  • Vamos a la ruta HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\ y le cambiamos de nombre a Tomcat5 por otro cualquiera, por ejemplo Tomcat5_primario.
  • Vamos a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\Tomcat5_primario y cambiamos el valor de la variable DisplayNameModificar de Apache Tomcat al que queramos, por ejemplo por Apache Tomcat Primario.
  • Vamos a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\Tomcat5_primario y cambiamos el valor de la variable ImagePath del valor c:\tomcat\bin\tomcat5.exe //RS//Tomcat5 por  c:\tomcat\bin\tomcat5.exe //RS//Tomcat5_primario. (Cuidado! tiene que ser el mismo nombre que le pusimos a la carpeta del primer paso).
  • Ahora iremos a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\Tomcat5_2\Enum y cambiaremos el valor de la variable 0 de Root\LEGACY_TOMCAT5\0000 por otro como por ejemplo Root\LEGACY_TOMCAT5_PRIMARIO\0000.
  • Ahora dependiendo si estamos en un Windows de 32 bits o de 64 bits tendremos que hacer cosas diferentes:
    • Para un windows de 32bits haremos lo siguiente:
      • Vamos a HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0 y renombraremos al carpetatomcat5 por otra como por ejemplo tomcat5_primario.
      • Por último iremos a HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\tomcat y renombraremos la carpeta 5.5 por otro nombre, por ejemplo 5.5_primario.
    • Para un Windows de 64bits haremos lo siguiente:
      • Vamos a HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0 y renombraremos al carpeta tomcat5 por otra como por ejemplo tomcat5_primario.
      • Por último iremos a HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\tomcat y renombraremos la carpeta 5.5 por otro nombre, por ejemplo 5.5_primario.

Modificamos el monitor del tomcat

Para windows de 32 bits:

  • Nos movemos a HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run y renombramos la variable ApacheTomcatMonitor por otro nombre, por ejemplo ApacheTomcatMonitorPrimario y le cambiamos el valor de "C:\tomcat\bin\tomcat5w.exe" //MS//Tomcat5 por el nuevo "C:\tomcat\bin\tomcat5w.exe" //MS//Tomcat5_primario. (Cuidado! el último nombre tiene que ser igual al nombre que le pusimos en el primer paso de la edición del servicio)

Para windows de 64 bits:

  • Nos movemos a HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run y renombramos la variable ApacheTomcatMonitor por otro nombre, por ejemplo ApacheTomcatMonitorPrimario y le cambiamos el valor de "C:\tomcat\bin\tomcat5w.exe" //MS//Tomcat5 por el nuevo "C:\tomcat\bin\tomcat5w.exe" //MS//Tomcat5_primario. (Cuidado! el último nombre tiene que ser igual al nombre que le pusimos en el primer paso de la edición del servicio)

Modificamos el desinstalador del tomcat

Para Windows de 32 bits:

  • Vamos a  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ y renombramos Apache Tomcat 5.5 por Apache Tomcat 5.5_2.
  • Vamos a  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Apache Tomcat 5.5 y cambiamos el valor de la variable DisplayName de Apache Tomcat 5.5 (remove only) por el de Apache Tomcat 5.5 (remove only) 2 (Asi sabremos cual es cual en la lista de programas para desinstalar).

Para Windows de 64 bits:

  • Vamos a  HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ y renombramos Apache Tomcat 5.5 por Apache Tomcat 5.5_2.
  • Vamos a  HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Apache Tomcat 5.5 y cambiamos el valor de la variable DisplayName de Apache Tomcat 5.5 (remove only) por el de Apache Tomcat 5.5 (remove only) 2 (Asi sabremos cual es cual en la lista de programas para desinstalar).

Cambiamos los puertos para que no colisionen

  • Modificar en el fichero server.xml el valor de los siguientes puertos por otros:
...
<Server port="8005" shutdown="SHUTDOWN">
...
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"
...
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
...

Ya tenemos todos cambiado, ahora podremos instalar el segundo tomcat con todo por defecto.

temas: 

Balanceador de tomcats con apache

Hacer un balanceador de tomcats con apache

A veces no nos basta con un servidor para poder responder a todas las peticiones que nos llegan y necesitamos tener varios servidores. Pero esto tiene que ser invisible para los usuarios y por eso el punto de entrada es el mismo. Para ello podemos usar un balanceador que según le vayan llegando peticiones de los usaurios les ira redireccionando a un servidor u otro.

Para tener varios servidores con Tomctas instalados y un Apache que redireccione las peticiones a estos, tendremos que seguir los siguientes pasos:

  • Descargamos el instalador del apache (http://httpd.apache.org/).
  • Instalamos el apache.
  • Nos bajamos el conector jk de aqui (http://tomcat.apache.org/download-connectors.cgi): Vamos a Binary Releases, luego a win32 (si tenemos un windows de 32 bits) y por último entramos en jk-1.2.28. Hay una versión para los apache 2.0.x y otra para los apache 2.2.x, bajad la correspondiente al vuestro (para el apache 2.2.x sería mod_jk-1.2.28-httpd-2.2.3.so).
  • Paramos el apache.
  • Movemos el fichero del conector jk a la carpeta de modulos del apache (por defecto es C:\Archivos de programa\Apache Software Fundation\Apache2.2\modules) y lo renombramos como mod_jk.so.
  • Ahora tendremos que editar el fichero de configuración httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) y añadir la siguiente línea en la zona donde se cargan los demás módulos:
LoadModule jk_module modules/mod_jk.so
  • Crearemos el fichero workers.properies con la definición de los tomcats y del tipo de balanceador. Por ejmplo, imaginemos que tenemos dos tomcats en la misma máquina (localhost), uno con el conector de AJP/1.3 en el puerto 8009 y otro en el puerto 8019 y que queremos usar un balanceador lb. Entonces tendremos el siguiente fichero de configuración:
workers.tomcat_home=C:/tomcat-5.5.20
workers.java_home=C:/jdk1.5.0_03
 
worker.list=balancer
 
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
 
worker.worker2.port=8019
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
 
worker.balancer.type=lb
worker.balancer.balance_workers=worker1,worker2
worker.balancer.method=B
  • En el archivo httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) tendremos que configurar unos parametros del conector jk y pondremos las siguientes líneas en las que indicaremos donde escribir los logs, donde esta el fichero que define los workers y alguna cosa mas:
# Path to workers.properties
JkWorkersFile C:/Archivos de programa/Apache Software Fundation/Apache2.2/conf/workers.properties
 
# Path to jk logs
JkLogFile C:/Archivos de programa/Apache Software Fundation/Apache2.2/mod_jk.log
 
# Jk log level [debug/error/info]
JkLogLevel info
 
# Jk log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
 
# JkOptions for forwarding
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
 
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
  • Después de las líneas anteriores, en el fichero httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) tendremos que indicar los path que queremos que se redireccionen a los tomcats y a cuales queremos que se redireccionen. Solo podremos direccionar explícitamente a los que esten puestos en la línea worker.list del workers.properties. Si queremos redireccionar a alguno que este dentro del balanceador, tendremos que ponerlos en esta línea también: worker.list=worker1,worker2,balancer. Por ejemplo, para que la url http://www.prueba.es/aplicacion sea redireccionada a algunos tomcats definidos en el archivo workers.properties, tendremos que poner alguna de las siguientes líneas dependiendo de a que lo queremos redireccionar (pondremos tantas líneas como sean necesarias):
# Para que envie al tomcat definido como worker1
JkMount /aplicacion worker1
 
# Para que envie a los tomcats definidos como worker1 y worker2
JkMount /aplicacion worker1 worker2
 
# Si queremos que lo envíe a los tomcats definidos en el balanceador
JkMount /aplicacion balancer