El caso es que tengo una aplicación que tiene una interfaz web para su administración pero sus autores no implementaron el soporte para SSL. Como no me gusta facilitar las cosas a los amigos de lo ajeno que se dedican a intentar perjudicar a los demás habitantes de este mundo que conocemos como Internet, hoy voy a explicaros como utilizar esta pequeña navaja suiza conocida como nginx.

Como todo lo que publico, el tutorial está pensado para ser utilizado en Ubuntu Server.

Instalar nginx

El primer paso es instalar nginx en el servidor, si no lo tenemos ya hecho.

sudo apt-get update
sudo apt-get install nginx

Crear un certificado

En mi caso, dado que es un servidor casero donde se usa, voy a generar un certificado autofirmado desde el propio equipo:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt

Modificar la configuración

Vamos a modificar la configuración para que cuando un usuario se conecte por el puerto 443 mediante HTTP seguro, haga un proxy a la aplicación que escucha por el puerto 2000 en plano.

sudo vi /etc/nginx/sites-enabled/default

Dentro del fichero modificamos la configuración para que se parezca a esta:

server {
 listen 80;
 return 301 https://$host$request_uri;
 }
server {
listen 443;
 server_name xxxxx.yyyyy.zzz;
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;
access_log /var/log/nginx/miweb.access.log;
location / {
proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
# Fix the “It appears that your reverse proxy set up is broken" error.
proxy_pass http://localhost:8080;
proxy_read_timeout 90;
proxy_redirect http://localhost:8080 https://xxxxx.yyyyy.zzz;
 }
 }

Recargar la configuración y probar

Primero probamos que la configuración sea estructuralmente correcta y luego recargamos la configuración de nginx mediante los siguientes comandos:

nginx -t
service nginx restart

y probamos desde nuestro navegador a acceder a la URL https://miservidor/