Para usted devops o configure proxies Nginx para Apache Tomcat en Ubuntu en 5 minutos con https y firewall



No soy administrador, pero a veces hay tareas que son más fáciles (y más interesantes) de resolver que delegar en alguien.

Ocasionalmente, necesitamos "elevar" el contenedor de servlet (más a menudo Apache Tomcat) y configurar el proxy para él, la terminación de SSL (o simplemente https) y cubrirlo todo con un firewall (dejando solo ssh y http / https).

Dio la casualidad de que en la última semana resolví este problema tres veces (a medida que las estrellas se hicieron, y antes de eso, hace dos años) y esta experiencia se transformó en esta pequeña obra.

Entonces, dado el servidor Ubuntu 18.04 o 16.04 (lo más probable es que no tenga problemas con las versiones anteriores 14.04 más o menos). Si no tiene un servidor Ubuntu, puede "recogerlo" rápidamente, por ejemplo, en Digital Ocean (mi enlace de referencia). Después de escribir el artículo, noté que DO para nuevas cuentas da $ 100 por 60 días para probar, si indica un préstamo.

DNS


Para un esquema simple para obtener un certificado https gratuito de Let's Encrypt, necesitamos acceso al servidor DNS. Escribimos en él la dirección IP de nuestro servidor Ubuntu con el nombre, digamos, xyz. Digamos, por seguridad, que tiene mydomain.com, es decir El nombre DNS de nuestro servidor será xyz.mydomain.com

Instalación


Instale Apache Tomcat (usaré la versión 8)

apt install tomcat8 

Y ahora Nginx

 apt install nginx-core 

Personalización


Nginx


Configure Nginx previamente registrado en el nombre del servidor DNS (archivo / etc / nginx / sites-available / default )

 server_name xyz.mydomain.com; 

Registramos el enlace al Apache Tomcat instalado (si no ha cambiado nada, entonces "vive" en el puerto 8080). Necesitamos agregar el bloque ascendente al bloque del servidor .

 upstream tomcat { server 127.0.0.1:8080 fail_timeout=0; } server { ... 

Realice cambios en el bloque de ubicación y redirija todo el tráfico a Apache Tomcat

 server { ... location / { # try_files $uri $uri/ =404; include proxy_params; proxy_pass http://tomcat/; } 

Verificamos que todo esté ingresado correctamente

 service nginx configtest 

y reiniciar nginx

 service nginx restart 

Gato apache


En principio, esta parte es opcional, y si no le importa que las direcciones IP reales, los puertos, el esquema para el que llega la solicitud (estoy hablando de https) y el servidor solicitado se envíen a tomcat, entonces este paso puede omitirse. Sin embargo, en algunos casos este paso es obligatorio (por ejemplo, para Java Web Start, también conocida como tecnología JNLP).

Agregue al archivo /etc/tomcat8/server.xml en el bloque <Host /> .

 <Host> ... <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto" /> </Host> 

Reiniciar tomcat

 service tomcat8 restart 

Certificado HTTP


Un certificado https con verificación a través de http nos ayudará a obtener el bot certbot, o más bien su modificación para nginx'a - python-certbot-nginx

En Ubuntu 18.04, para instalar certbot, simplemente ejecute

 apt install python-certbot-nginx 

Para Ubuntu 16.04: debe jugar con la adición de repositorios, etc. (consulte la guía detallada del enlace ).

Lanzamos

 certbot --nginx 

En el proceso, especifique su correo electrónico, acepte el acuerdo de licencia, no nos permita "manipular" nuestros datos con Let's Encrypt, confirme el nombre DNS al que se emitirá el certificado, acepte que el propio bot "configurará" nginx.

Voila :)

Por si acaso, verificamos que la renovación del certificado pasará sin problemas (el certificado se expide por 90 días y luego puede extenderse indefinidamente por el mismo período).

 certbot renew --dry-run 

Y para la paranoia interna, verificamos que el archivo cron esté en su lugar

 ls -al /etc/cron.d/certbot 

Cortafuegos


Nos detenemos y hacemos una copia de seguridad (instantánea) de la máquina virtual.

 ufw allow ssh ufw allow http ufw allow https ufw default allow outgoing ufw default deny incoming ufw show added 

Rezar
 ufw enable ufw status 

Verificamos que todo funcionó: se puede acceder al sitio a través de https, se redirige el tráfico http y se cierran de forma segura los puertos que no sean los mencionados anteriormente y ssh.

PD: Espero sinceramente que este texto pueda ser útil para alguien y me complacerá recibir críticas constructivas.

PPS ¿O tal vez el omnisciente TODO me dirá el reemplazo de certbot para Windows? Necesita obtener el certificado inicial (idealmente, actualizarlo de acuerdo con el cronograma, o en general el brillo elegante). Configuré nginx yo mismo. Sí, entiendo que probablemente pueda tomar la herramienta para cifrar + IIS y usarla en mi script, pero ¿de repente hay un "ideal" listo?

Source: https://habr.com/ru/post/es434010/


All Articles