===== HTTP y HTTPS en servicios Atlassian (Tomcat) con Nginx como proxy HTTPS reverso =====
Guía básica sobre como implementar HTTP y HTTPS de forma simultanea en sistemas Atlassian, extensible a cualquier aplicación que utilice Tomcat como servidor web.
**Sistemas Atlassian**: [[https://www.atlassian.com/]]
Para el ejemplo de configuración se utilizarán dos puertos.
- Puerto HTTP: 8080
- Puerto HTTPS: 8081
- Dominio: DOMINIO.COM
La configuración de Nginx se encargará de redirigir los puertos.
* http://DOMINIO.COM:80 > http://DOMINIO.COM:8080
* https://DOMINIO.COM:443 > http://DOMINIO.COM:8081
Configuración del servidor Tomcat, se debe activar un puerto extra para HTTPS: /opt/atlassian/jira/conf/server.xml
**Crear el certificado SSL (autofirmado) para las conexiones HTTPS**.
openssl req -x509 -sha512 -nodes -days 9999 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt
Configuración de Nginx como proxy reverso HTTP y HTTPS.
####################### HTTP (80 ---> 8080)
server {
listen 80;
server_name DOMINIO.COM;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 20M;
}
}
####################### HTTPS (80 ---> 8081)
server {
listen 443;
server_name DOMINIO.COM;
# SSL
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
# REVERSE HTTP + SSL PROXY
location / {
proxy_pass http://localhost:8081;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 20M;
}
}
Al reiniciar NGinx y el servicio Atlassian que se esté utilizando (Jira, Confluence, Bamboo, etc.), se podrá acceder a la conexión HTTPS por medio de https://DOMINIO.COM y a HTTP con http://DOMINIO.COM.
Si para el puerto 80 no se quiere configurar Nginx como proxy reverso, se puede utilizar por ejemplo la herramienta socat de la siguiente manera para crear la redirección.
socat TCP-LISTEN:80,fork TCP:127.0.0.1:8081 &> /dev/null &