Cómo configurar Apache Webserver Proxy frente a Apache Tomcat en Red Hat Linux
- 4983
- 861
- Claudia Baca
Objetivo
Nuestro objetivo es configurar Apache Httpd para que funcione como un proxy frente al contenedor de aplicación Apache Tomcat.
Sistema operativo y versiones de software
- Sistema operativo: Red Hat Enterprise Linux 7.5
- Software: Apache httpd, Apache Tomcat
Requisitos
Acceso privilegiado al sistema
Dificultad
FÁCIL
Convenciones
- # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de
sudo
dominio - ps - Dados los comandos de Linux para ser ejecutados como un usuario regular no privilegiado
Introducción
El uso de Apache Httpd como proxy para un contenedor de aplicación Apache Tomcat es una configuración común. Viene con muchos casos de uso, el más trivial es servir contenido estático de httpd
, mientras proporciona servicios que implementan una lógica de negocios pesados de una aplicación escrita en Java que reside en el contenedor Tomcat.
Al crear un proxy, podemos crear un tipo de front-end para la capa de aplicación, donde podemos introducir medidas de seguridad en el servidor web, aplicar equilibrio de carga, usar redirección condicional o usar cualquier otra funcionalidad proporcionada por el servidor web. De esta manera, no necesitamos implementar ninguna de estas funciones en nuestra aplicación, y podemos enfocar sus capacidades para el servicio en sí. Tendremos un servidor web con todas las funciones presentadas para los usuarios, algunas de las URL reenviadas en silencio al contenedor de aplicaciones al que no puede ser accesible por sí solo. Las respuestas de la aplicación se devuelven a los clientes que no sabrán que hablaron cualquier otra cosa que no sea el servidor web, es decir, si tenemos cuidado de no exponer ninguna información (como mensajes de error no controlados) de la aplicación que puede hacer que adivinen que hay más que una capas.
Utilizaremos el protocolo AJP que se puede utilizar entre los servidores web y los contenedores de aplicaciones basados en Java para proporcionar la capacidad de equilibrar la carga entre múltiples servidores de aplicaciones; sin embargo, para configurar un equilibrador de carga está fuera del alcance de este tutorial.
Configuraremos nuestra configuración en Red Hat Linux 7.5, pero el servidor web de Apache, el módulo AJP y el contenedor de la aplicación Apache Tomcat están disponibles en todas partes, y por lo tanto, esta configuración es portátil con pequeños ajustes como rutas del sistema de archivos o nombres de servicio.
Instalación del software requerido
Primero necesitamos instalar los servicios que utilizaremos. En una configuración de carga equilibrada, los servidores Tomcat podrían estar en diferentes máquinas, y a menudo lo están, proporcionando una granja de contenedores que construyen un servicio.
# yum install httpd tomcat tomcat-webapps
Instalamos el Tomcat-Webapps
Para fines de prueba, dentro de este paquete hay una aplicación web ejemplos implementada en nuestro servidor Tomcat en la instalación. Usaremos esta aplicación para probar que nuestra configuración funciona según lo previsto.
Ahora podemos habilitar e iniciar nuestro servidor Tomcat:
# SystemCTL Habilitar Tomcat
# SystemCTL Start Tomcat
Y nuestro servidor web:
# SystemCTL Habilitar httpd
# SystemCTL Inicio HTTPD
El valor por defecto httpd
La instalación contiene los módulos proxy que necesitamos. Para verificar que es así, podemos consultar el servidor web con apachectl
:
# apachectl -m | GREP AJP Proxy_ajp_module (compartido)
Copiar Nota 1.X Apache Versiones usa mod_jk
módulo en lugar de proxy_ajp
.
configuración de httpd
La aplicación web de ejemplos implementada en TomCat se publican después de la instalación de forma predeterminada en SERVER-URL: 8080/Ejemplos
. Prosxy solicitudes que llegan al puerto 80 del servidor (el puerto HTTP predeterminado) solicitando algo desde el servidor-url/ejemplos
para ser atendido por el ejemplos
Aplicación web implementada en Tomcat. Las solicitudes que lleguen a cualquier otra URL en el servidor serán atendidas por el servidor web. Configuraremos un contenido estático para mostrar esta funcionalidad.
En nuestro ejemplo se llama al servidor WS.foobar.comunicarse
. Para que el proxy funcione, cree un archivo de texto con su editor favorito en el directorio de configuración del servicio web, que es /etc/httpd/conf.d
en sabores de sombrero rojo, con la extensión de .confusión
. Nuestra configuración no necesita que Tomcat sea accesible directamente, por lo que usamos hostil
como anfitrión de Target en el /etc/httpd/conf.d/Ejemplo_proxy.confusión
archivo:
Servername WS.foobar.com proxyRequests Off proxyPass/ejemplos ajp: // localhost: 8009/ejemplos proxyPassReverse/ejemplos ajp: // localhost: 8009/ejemplos
Copiar Para estar en el lado seguro, podemos verificar que nuestra configuración sea correcta antes de aplicar con apachectl
:
# sintaxis de configuración apachectl ok
Copiar Si la prueba de configuración devuelve un error como el siguiente:
No pudo resolver el nombre de host ws.foobar.com - ignorando!
Si significa que nuestro Nombre del servidor
La directiva no es válida, ya que el servidor web no puede resolver. O necesitamos registrarlo en el DNS (local o global) o proporcionar una línea en el /etc/huéspedes
Archivo que contiene la dirección IP pública del host seguida del nombre que dimos en la configuración anterior. Si el archivo de hosts ya contiene la IP con otro nombre (tal vez el nombre de host real), podemos agregar el nombre de servidor después de los nombres del host en la misma línea, la configuración funcionará.
Después de una prueba exitosa, debemos aplicar la nueva configuración reiniciando el servidor web:
# SystemCTL reiniciar httpd
Configuración de Tomcat
Con la instalación predeterminada, el contenedor Tomcat escuchará las solicitudes de AJP en todas las interfaces en el puerto 8009. Esto se puede verificar en el archivo de configuración principal:
# Ver/USR/Share/Tomcat/Conf/Server.XML […] […]
Copiar Si no necesitamos que el contenedor Tomcat y las aplicaciones dentro sean accesibles por sí mismos, podemos configurar cada conector para escuchar solo en localhost:
Dirección del conector = "127.0.0.1 "puerto = ..."
Para aplicar podemos reiniciar Tomcat con:
# SystemCTL reiniciar Tomcat
En nuestra máquina de laboratorio no hará esto, ya que necesitamos ver que nos sirvan el mismo contenido en ambos puertos 80
y 8080
.
Pruebas
Nuestra configuración mínima de proxy de AJP está completa, podemos probarla. Desde la línea de comando podemos llamar al ejemplos
Aplicación directamente en el puerto 8080
:
$ wget http: // ws.foobar.com: 8080/ejemplos --2018-09-13 11: 00: 58-- http: // ws.foobar.com: 8080/ejemplos resolviendo WS.foobar.com (ws.foobar.com) .. . 10.104.1.165 Conectando a WS.foobar.com (ws.foobar.com) | 10.104.1.165 |: 8080 .. . conectado. Solicitud de HTTP enviada, en espera de respuesta .. . 302 Ubicación encontrada:/ejemplos/[siguiente] --2018-09-13 11: 00: 58-- http: // ws.foobar.com: 8080/ ejemplos/ reutilización de conexión existente a WS.foobar.com: 8080. Solicitud de HTTP enviada, en espera de respuesta .. . 200 Ok Longitud: 1253 (1.2k) [texto/html] Guardar a: 'Ejemplos' 100%[===================================== ==================================================== ==================================================== ===================================>] 1,253 --.-K/S en 0s 2018-09-13 11:00:58 (102 MB/s)-'Ejemplos' guardados [1253/1253]
Copiar Y ver el contenido proporcionado:
$ Tail Ejemplos Ejemplos de Apache Tomcat
- Ejemplos de servlets
- Ejemplos de JSP
- Ejemplos de WebSocket (JSR356)
- Ejemplos de WebSocket utilizando la desactivada API propietaria de Apache Tomcat