Apache Como Frontend de Tomcat
USAR Apache Server Como Frestend Agroga Mejoras Como Son:
- Alta Disponibilidad Mediante La Realización de Equilibios de Carga Entre Varios Servidores Tomcat.
- Procesamiento Rápido y entrega de contenido estático.
- Мейорас де Сегуридад.
- Функции опираются на Trawés de Módulos Apache.
EN ESTE EJEMPLO VAMOS TEANER ON CONTEDUNDOR Docker Para Conectar 2 Servidores Tomcat Con Dos War Correiendo Cada Uno A Apache HTTPD.
ПРОЕКТО
Primero TeneMos que Tener Instalado Docker, Puedes Encontrar Las Instrucciones de Instalación desde El Sitiofial Отказ También Necesitamos Instalar Docker Compose Отказ
Репозиторион
PUEDES ENCONTRAR EL REPOSITORIO DEL PRYECTO AQUI: https://github.com/rigobertocanseco/Docker-apache-httpd-tomcat.
Директив
EL PREECTO SE ENCUENTRA ОРГАНИЗАДЫ ДЕ ЛА СИГУИЕНТА MANERA
├── docker-compose.yml
├── .env
├── .dockerignore
├── .gitignore
├── httpd
│ ├── certs
│ │ ├── localhost.crt
│ │ ├── localhost.key
│ │ ├── rootCA.crt
│ │ └── rootCA.key
│ ├── 000-default.conf
│ ├── apache2.conf
│ ├── Dockerfile
│ ├── jk.conf
│ └── worker.properties
├── tomcat1
│ ├── Dockerfile
│ ├── sample.war
│ └── server.xml
└── tomcat2
├── Dockerfile
├── sample.war
└── server.xml
- Docker-Compose.yml : Aquí TeneMos La Configuración Para Nuestro Contender Docker
- env : Nuestras Reestry De Entorno Para Nuestro Contendedor
- .Dockerignore : Архивос Игнар
- .ignore : Архивос Игнар
- httpd : Directorio Con Configuración Para el contedor con apache httpd
Сертирование : Directorio Con Los Certificals SSL
- Certyado del Servidor (localhost.crt) y llave privada (localhost.key).
- CAREDADO CA Y LLAVE Privada (rootca.crt y pootca.key).
- Tomcat1 : Directorio Con Configuración Para EL Contedor Con Apache Tomcat
- Tomcat2 : Directorio Con Configuración Para EL Contedor Con Apache Tomcat
Configuración del Servidor Apache
Dockerfile
Гист: Rigobertocanseco/0B17CDA5B1C595BAE893D25E8CD6D804 # DockerFile
Vamos a Revisar LAS Partes Nickens Neads Del Archivo:
- Creamos un Contender Con Una Imagen de Ubuntu
суть: Rigobertocanseco/0B17CDA5B1C595BAE893D25E8CD6D804 # Dockerfile? Lines = 1
FROM ubuntu:latest
- Определенные переменные Nuestras de Entorno
ENV DEBIAN_FRONTEND="noninteractive"
ENV SITE_NAME rigobertocanseco.dev
ENV URL_SECURE https://${SITE_NAME}:8443/
# Certificates of demo
ENV APACHE_SSL_CERT_CA rootCA.crt
ENV APACHE_SSL_CERT localhost.crt
ENV APACHE_SSL_PRIVATE localhost.key
# Certificates of prod
#ENV APACHE_SSL_CERT_CA ca_bundle.crt
#ENV APACHE_SSL_CERT certificate.crt
#ENV APACHE_SSL_PRIVATE private.key
- Indalamos apache con el comando
APTES Отправляемый де ла АДМИНИКАКИОН де Пакет у, Пор Ло Танто, де ла Инталацион.
RUN apt-get update && apt-get install -y --no-install-recommends apache2 libapache2-mod-jk
- Agrogamos Los Archivos Para Configurarar Apache.
ADD apache2.conf /etc/apache2/apache2.conf ADD 000-default.conf /etc/apache2/sites-enabled/000-default.conf ADD worker.properties /etc/libapache2-mod-jk/workers.properties ADD jk.conf /etc/apache2/mods-available/jk.conf
- Copiamos Nuestros Сертификатор SSL AL Contendedor
COPY certs/${APACHE_SSL_CERT_CA} /etc/ssl/certs/${APACHE_SSL_CERT_CA}
COPY certs/${APACHE_SSL_CERT} /etc/ssl/certs/${APACHE_SSL_CERT}
COPY certs/${APACHE_SSL_PRIVATE} /etc/ssl/private/${APACHE_SSL_PRIVATE}
- HABILITAMOS LOS Módulos de Apache Que Vamos Usar, Para Obtener Más Información Consware La Documentación del Módulo Apache mod_http2 Отказ
# Modules to apache RUN a2enmod proxy \ && a2enmod ssl \ && a2enmod proxy_ajp \ && a2enmod rewrite # Mod Proxy(mod_proxy) # && a2enmod proxy_http \ # && a2enmod proxy_fcgi \ # && a2enmod proxy_balancer \ # && a2enmod lbmethod_byrequests \ # && a2enmod headers
- POR último Creamos un Volumen Con EL Directionio de logs de Apache, ExponeMos El Puerto 80 Y 443 Para El Puerto Normal Y Puerto Seguro, stature. Y el último comando a ejecutar es Para Poner EN ESCUCHA EL NUEVO SERVICEIO HTTP DE APACHE.
VOLUME ["/var/log/apache2"] EXPOSE 80 443 CMD ["apachectl", "-k", "start", "-DFOREGROUND"]
000 — по умолчанию .Conf.
Vamos A Ver Las Partes Industries Del Archivo, Aquí SE Encuentra La Documentación de Las Directivas de Configuración de Apache.
- Configuramos EL Servidor Web Apache HTTPD, SE Redireccionan Las Peticionses Аль Пуэрто-Сегуро 443
... # Redirect to port secure #Redirect / ${URL_SECURE} RewriteEngine on ReWriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] ...
- SE Configura EL PUERTO 443 COMO PUERTO SEGURO, SE INDICAN EL SEGURO SSL, LA LLAVE PRAPADA Y EL CERTIMADO DE CA ( innitucción A SSL ) Así Como Directivas de Configuración Disponiables El Módulo mod_ssl
... SSLCertificateFile /etc/ssl/certs/${APACHE_SSL_CERT} SSLCertificateKeyFile /etc/ssl/private/${APACHE_SSL_PRIVATE} SSLCACertificatePath /etc/ssl/certs/ SSLEngine on SSLProxyEngine On SSLProxyVerify none SSLProxyCheckPeerCN Off SSLProxyCheckPeerName Off SSLProxyCheckPeerExpire Off ProxyPreserveHost Off ProxyRequests Off ...
- SE INDICA EL CONTESTO DE ООН Рабочий De Tomcat, Donde образец es en contexto para el работница погрузчик , y статус пункт El Worker Статус Отказ La Documentación de JK Connector SE Encuentra Aquí С y la documentación de los workes la puedes encontrar Aquí Отказ
... jkMount /sample loadbalancer JkMount /sample/* loadbalancer JkMount /status status JkMount /status/* status # # SetHandler server-status # Order Deny,Allow # Allow from all # #Location /balancer-manager> # SetHandler balancer-manager # Order Deny,Allow # Allow from all # #Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED ## BalancerMember ajp://tomcat1:9090 route=tomcat1_1 retry=0 # BalancerMember ajp://tomcat2:9091 route=tomcat1_2 retry=0 # BalancerMember ajp://tomcat1:9090 route=tomcat2_1 retry=0 # BalancerMember ajp://tomcat2:9091 route=tomcat2_2 retry=0 # #ProxyPass /sample balancer://tomcat-cluster/sample stickysession=JSESSIONID│jsessionid scolonpathdelim=On #ProxyPassReverse /sample balancer://tomcat-cluster/sample
apache2.conf.
Эль Архиво apache2.conf Contiene La Configuración. пункт El Apache HTTPD POR по умолчанию ( Ver Documentación ).
jk.config.
Эль Архиво jk.config Contiene La Configuración. Para El Módulo Jk разъем . EL CONOCTOR JK ES ON Componente DE Servidor Web Que Se Utiliza Para Integrar de Forma «Невидимый» Tomcat Con Or Servidor Web Como Apache. La Comunicación Entre El Servidor Web Y Tomcat Se Realiza Través Del Protocolo JK (También Conocido Como Protocolo AJP ).
JkLogLevel info JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories JkRequestLogFormat "%w %V %T"
worker.properties
Эль Архиво работник. Проверьте Contiene La Configuración. Пара Tomcat рабочий Отказ Рабочий ООН ES Una Instancia de Tomcat Que Está Esperando Para Ejecutar Servelets O Custerquier Otro ConteniDo En Nombre de Algún Servidor Web. EN ESTE Archivo ES Donde Vamos A Configurar La Conexión de Nuestras Instancias Tomcat Con Apache HTTPD POR MEDIO DE AJP (Ver documentación) .
DOS DOS-работники LoadBancer Y Status, El Primero VA SER Nuestro Баланчайён де Каругар y el segundo lo usaremos para ver el status de nuestro loadbalancer. El LoadBalancer SE Encuentra de la Siguiente Manera:
- Tomcat1: 2 рабочие, Tomcat 1_1 POR PUERTO 9090 Y Tomcat 1_2 POR PUERTO 9091,
- Tomcat2: 2 рабочие, tomcat2_1 por puerto 9090 y tomcat2_2 puerto 9091
LOS 4 работников Están Configurados Con Sticky_Session, Usan Los Puertos 9090 Y 9091 Que Configuramos пункт Ajp13. . Ver la documentación del connector mod_jk. .
# #------ worker list ------------------------------------------ #--------------------------------------------------------------------- # # # The workers that your plugins should create and work with # ps=/ worker.list=loadbalancer,status # # # #------ DEFAULT LOAD BALANCER WORKER DEFINITION ---------------------- #--------------------------------------------------------------------- # # # The loadbalancer (type lb) workers perform wighted round-robin # load balancing with sticky sessions. # Note: # ----> If a worker dies, the load balancer will check its state # once in a while. Until then all work is redirected to peer # workers. worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=tomcat1_1,tomcat1_2,tomcat2_1,tomcat2_2 worker.loadbalancer.sticky_session=True worker.status.type=status # #------ ajp13_worker WORKER DEFINITION ------------------------------ #--------------------------------------------------------------------- # # # Defining a worker named ajp13_worker and of type ajp13 # Note that the name and the type do not have to match. # worker.tomcat1_1.port=9090 worker.tomcat1_1.host=host.tomcat1 worker.tomcat1_1.type=ajp13 worker.tomcat1_1.connection_pool_timeout=600 worker.tomcat1_1.route=tomcat1_1 #worker.tomcat1_1.socket_keepalive=1 worker.tomcat1_2.port=9091 worker.tomcat1_2.host=host.tomcat1 worker.tomcat1_2.type=ajp13 worker.tomcat1_2.connection_pool_timeout=600 worker.tomcat1_2.route=tomcat1_2 #worker.tomcat1_2.socket_keepalive=1 worker.tomcat2_1.port=9090 worker.tomcat2_1.host=host.tomcat2 worker.tomcat2_1.type=ajp13 worker.tomcat2_1.connection_pool_timeout=600 worker.tomcat2_1.route=tomcat2_1 #worker.tomcat2_1.socket_keepalive=1 worker.tomcat2_2.port=9091 worker.tomcat2_2.host=host.tomcat2 worker.tomcat2_2.type=ajp13 worker.tomcat2_2.connection_pool_timeout=600 worker.tomcat2_2.route=tomcat2_2 #worker.tomcat2_2.socket_keepalive=1
Configuración del contenedor con tomcat1 y tomcat2
Dockerfile
Vamos A Revisar LAS Partes Del Archivo Dockerfile:
- SE CREA UNA Imagen de Tomcat 9.0,
- COPIAMOS EL ARCHIVO SERVER.XML Y EL FUCKEMS.WAR EN APP1 Y APP2.
- POR último ExponeMos Los Puertos 9090 Y 9091.
FROM tomcat:9.0 COPY server.xml /usr/local/tomcat/conf/ # add context to /usr/local/tomcat/webapps COPY sample.war /usr/local/tomcat/app1/sample.war COPY sample.war /usr/local/tomcat/app2/sample.war EXPOSE 9090 9091
образец .war
Aquí ColoCamos un War Que VA Servir Como Ejemplo Para Deployer.
server.xml.
EN EL Archivo Server.xml SE Encuentra La Configuración Para El Servidor Tomcat, En Este Caso Solo Nos Interesa Revisar Lo Siguiente:
- RU
<Сервис>SE Encuentra La Un Tomcat Que Corre Por El Puerto 8080, Doctro encontramos<Разъем ......./>,<Двигатель>y. - RU
<Сервис>SE Encuentra La Un Tomcat Que Corre Por El Puerto 8081, Doctro encontramos<Разъем ......./>,<Двигатель>y.
EN EL Servidor Tomcat TeneMos 2 Servicios Catalina1 y Catalina2 que correen por el puerto 8080 (puerto para ajp 9090) Y 8081 (Пуэрто PARA AJP 9091), Уверенность. CADA SERVICIO SE Identiala Con Nombre Para JVMROUTER. , tomcat1_1 y tomcat1_2, estos nombres stanan ligados Con рабочий.tomcat1_1.ruote = tomcat1_1. y работник.tomcat1_2.route. = tomcat1_2 Де работник. Проверьте Отказ
El HostName Para Este Tomcat ES host.tomcat1 Que También SE Encuentran en рабочий .tomcat1_1.host = host.tomcat1. y Worker.tomcat1_2.host = host.tomcat1.
... ... ... ... ... ... ... ... ... ...
Configuración de Docker составляют
.env.env.
Aquí TaklaMos 2 Переменные de Entorno Para los puertos que vamos utilizar
HOST_HTTP_PORT=8080 HOST_HTTPS_PORT=8443
Docker-Compose.yml.yml.yml
TeneMos Configurado 2 Servidores Tomcat Y EL Servidor Apache HTTPD RU UN Docker Compose ( Documentación ).
- Asignamos un volumen para EL Directorio бревно
- TeneMos Asignado El Puerto 8080 Para El Puerto 80 De Apache Y El Puerto 8443 Para El Puerto Seguro 443.
- Ligamos los dos servicios tomcat Tomcat1. y Tomcat2 AL CONDENDOR DE APACHE HTTPD CON LOS HostNames host.tomcat1 y host.tomcat2. .
version: '2'
services:
tomcat1:
build: tomcat1/.
tomcat2:
build: tomcat2/.
httpd:
volumes:
- ./logs:/var/log/apache2
ports:
- "${HOST_HTTP_PORT}:80"
- "${HOST_HTTPS_PORT}:443"
build: httpd/.
links:
- tomcat1:host.tomcat1
- tomcat2:host.tomcat2
Ejecutar Servicios.
Los Comandos de CompiLación Y Ejecución de Docker Deben Ejecutarse desde La Raíz del Directorio del ProyeCto Después de Clonar Este Repositorio.
$ docker-compose build $ docker-compose up -d $ docker-compose ps
`
Усандо Эль-Комндо Docker-Compose PS Deberíamos Poder ver el nuevo contender en la lista como se indow a continuación. `
Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------- docker-apache-httpd-tomcat-ssl_httpd_1 apachectl -k start -DFOREG ... Up 0.0.0.0:8443->443/tcp, 0.0.0.0:8080->80/tcp docker-apache-httpd-tomcat-ssl_tomcat1_1 catalina.sh run Up 8080/tcp, 9090/tcp, 9091/tcp docker-apache-httpd-tomcat-ssl_tomcat2_1 catalina.sh run Up 8080/tcp, 9090/tcp, 9091/tcp
`
Redamos El Hostname de Nuestra Máquina. En linux editamos el archivo /etc/hosts Agrogamos Lo Siguiente. 127.0.0.1 Demo.com.
Partir de Este Momento Es Bosible Acceder A https://demo.com:8443/sample/ y para ver el balanceador de carga https://demo.com:8443/status/
Ссылки
Кластеризация Tomcat — пошаговое руководство Сравнение MOD_PROXY и MOD_JK Tomcat Clustering mod_jk, mod_proxy и mod_proxy_ajp Разъемы Apache HTTP-сервера и руководство по балансированию нагрузки
Оригинал: «https://dev.to/rigomortiz/docker-con-apache-httpd-y-tomcat-f9j»