Configuración de Nginx para Web Sockets Seguros (wss)

Hace un tiempo atras empecé a interiorizarme en el manejo de Web Sockets, para lo cual realizé un chat de pruebas, para lo cual necesité configurar Nginx para que se ocupe de realizar la redirección de puertos y la utilización de certificados SSL.

Bueno, el primer paso será obtener los certificados SSL, para lo cual usé Let’s Encript, luego se necesita crear el archivo de configuración correspondiente en: /etc/nginx/sites-available.

En este caso el archivo que cree se denomina chat-ws.greenborn.com.ar, con el siguiente contenido:

server {
    listen PUERTO_ESCUCHA;
    ssl on;
    server_name DOMINIO;

    ssl_certificate PATH_CERTIFICADO/fullchain.pem; # managed by Certbot
    ssl_certificate_key PATH_CERTIFICADO/privkey.pem; # managed by Certbot
    include PATH_LETS_ENCRIPT/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam PATH_LETS_ENCRIPT/ssl-dhparams.pem; # managed by Certbot

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass         "http://127.0.0.1:PUERTO_INTERNO";
    }
}

Claramente en el mismo se debe reemplazar:

  • PUERTO_ESCUCHA: Especificando el puerto que se usará publicamente para la conexion con el Web Socket
  • DOMINIO: El dominio asignado a la APP
  • PATH_CERTIFICADO: Ubicación del certificado SSL
  • PATH_LETS_ENCRIPT: Ubicación de la instalación de Lets Encript
  • PUERTO_INTERNO: Es el puerto que la APP estará escuchando

Luego será necesario crear el enlace simbólico del archivo de configuración, por ej con:

ln -s /etc/nginx/sites-available/archivo_config /etc/nginx/sites-enabled/archivo_config

Y reiniciar el servicio de Nginx

sudo service nginx restart

Con eso ya sería todo.

Una forma de comprobar el funcionamiento podría ser usar una extensión del navegador como simple-websocket-client, disponible tanto para Firefox como para Chrome: https://addons.mozilla.org/en-US/firefox/addon/simple-websocket-client/ o https://chrome.google.com/webstore/detail/simple-websocket-client/pfdhoblngboilpfeibdedpjgfnlcodoo