Saltar la navegación

3.1.2.- Iniciar Tomcat.

Ilustración del menú principal de configuración de Tomcat
betacontinua (CC BY-NC-SA)

Tomcat va a estar escuchando en el puerto 8080 y va a tener su propio directorio de trabajo. La misión de apache2 va a ser interceptar todas las peticiones en el puerto 80 y derivar las que considere necesarias a Tomcat; de este modo observamos la ventaja de la escalabilidad, ya que apache, al funcionar como proxy, puede tener una batería de tomcats a los que balancear las conexiones, haciendo que, si nuestras necesidades crecen, nuestras máquinas puedan ampliarse en número siendo completamente transparente para los usuarios.

Apache por defecto busca los ficheros en /var/www/html, Tomcat trabaja sobre la carpeta /opt/tomcat/webapps. La petición de una URL se puede gestionar, parte por apache y parte por Tomcat, por lo que vamos a cambiar la carpeta por defecto de trabajo para unificarlo. Para ello editamos el fichero /opt/tomcat/conf/conf/server.xml.

$ sudo nano /opt/tomcat/conf/server.xml

en donde encontraremos una línea con "Host name=" y debería tener:

Host name=”localhost” appBase=”wwebapps"

Para usar la aplicación de administración web que viene con Tomcat, debemos añadir un inicio de sesión a nuestro servidor de Tomcat. Para ello editaremos el archivo tomcat-users.xml:

$ sudo nano /opt/tomcat/conf/tomcat-users.xml 

Deberíamos añadir un usuario que pueda acceder a manager-gui y admin-gui (aplicaciones web que vienen con Tomcat). Podemos definir un usuario, por ejemplo como el que se muestra a continuación, entre las etiquetas tomcat-users, y poniendo nombres de usuarios y contraseñas seguras:

<tomcat-users . . .>
    <user username="admin" password="password" roles="manager-gui,admin-gui"/>
</tomcat-users>

Si en cualquier momento deseásemos parar o arrancar el servidor, podríamos emplear los siguientes comandos respectivamente:

$ sudo systemctl stop tomcat
$ sudo systemctl start tomcat

O bien:

$ sudo service tomcat stop
$ sudo service tomcat start

Debes conocer

Ilustración en la que aparece un gráfico con la nube que representa Internet en color gris conectada con dos flechas con un servidor en color naranja, conectado a suvez con dos flechas con otro servidor Web en color gris.
H2g2bob (CC0)


Proxy inverso. Un proxy inverso es un tipo de servidor proxy que recupera recursos en nombre de un cliente desde uno o más servidores. Estos recursos son entonces redirigidos al cliente como si se originaran en el propio servidor Web. Son también conocidos como "servidores de paso" o gateway.

En tales escenarios, el propio servidor no genera contenido o aloja datos, en su lugar el contenido se obtiene de uno o varios servidores backend, que normalmente no tienen conexión directa con redes externas.

Cuando el proxy inverso recibe una petición de un cliente, reenvía esta petición a uno de estos servidores backend, que gestiona la petición, genera el contenido y entonces envía este contenido de vuelta al proxy, que entonces genera la respuesta HTTP definitiva que se envía de vuelta al cliente.

Existen muchas razones para usar esta implementación, pero generalmente las razones típicas se deben a seguridad, alta disponibilidad, balanceo de carga, y centralización de autenticación/autorización. Es crítico en estas implementaciones que la arquitectura y el diseño de la infraestructura de los backend (esos servidores que son los que acaban gestionando las peticiones) estén aislados y protegidos del exterior; en cuanto al cliente se refiere, el proxy inverso és la única fuente de todo el contenido.

Apache2 se puede configurar como proxy inverso, para ello cargaremos los módulos siguientes para poder conseguir que Apache funcione como proxy:

$ sudo a2enmod proxy
$ sudo a2enmod proxy_ajp
$ sudo a2enmod proxy_balancer
$ sudo /etc/init.d/apache2 restart

ajp es un protocolo de comunicación interno y muy rápido que usa conexiones TCP persistentes. Es este protocolo el que vamos a utilizar para comunicar apache2 con Tomcat, aunque podría ser utilizado HTTP, indicando que pregunte en el 8080. El puerto de trabajo por defecto para Tomcat es el 8009, aunque este puede ser variado desde /opt/tomcat/conf/server.xml.

Modificamos el fichero de configuración del virtualhost que se pretenda utilizar, empleando el establecido por defecto.

$ sudo nano /etc/apache2/sites-enabled/000-default.conf

en donde añadimos lo siguiente:

<Proxy balancer://tomcat_cluster>
  Order allow,deny
  Allow from all
  BalancerMember ajp://localhost:8009
</Proxy>
ProxyPreserveHost On
ProxyPass /phpmyadmin/ !
ProxyPass / balancer://tomcat_cluster/
ProxyPassReverse / balancer://tomcat_cluster/

Pasamos a definir cada uno de los parámetros anteriores:

  • Proxy balancer://tomcat_cluster: Estamos definiendo un cluster con nombre "Tomcat_cluster"

  • BalancerMember ajp://localhost:8009: Se define un miembro a Tomcat_cluster, protocolo, IP y puerto.

  • ProxyPass / balancer://tomcat_cluster/: "/" y todo lo que cuelgue de ella, sea pasado al cluster del tomcat para que lo procese él.

  • ProxyPreserveHost On: Mantiene la cabecera http host original, en vez de reescribirla.

Lo último es cambiar de /etc/apache2/sites-enabled/000-default.conf el "DocumentRoot" y "<Directory /var/www/html>" para que apunten a /var/www/ROOT, de esta manera podemos decidir qué parte gestiona cada aplicación desde un solo directorio.

Un gateway (puerta de enlace) es un dispositivo, con frecuencia un ordenador, que permite interconectar redes con protocolos y arquitecturas diferentes a todos los niveles de comunicación.

El backend es la parte del desarrollo web que se encarga de que toda la lógica de una página web funcione. Se trata del conjunto de acciones que pasan en una web pero que no vemos como, por ejemplo, la comunicación con el servidor.