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.
La configuración de Nginx se encargará de redirigir los puertos.
Configuración del servidor Tomcat, se debe activar un puerto extra para HTTPS: /opt/atlassian/jira/conf/server.xml
<Service name="Catalina"> <!-- HTTP (Por defecto)--> <Connector port="8080" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true"/> <!-- HTTPS (Agregado por nosotros) --> <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" port="8081" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" scheme="https" proxyName="DOMINIO.COM" proxyPort="443" secure="true"/>
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 &