Conéctese al servidor websocket sin especificar el puerto

Conéctese al servidor websocket sin especificar el puerto

Estoy intentando crear un servidor node.js seguro sin un servidor websocket en el mismo puerto. El puerto es 8080.

Puedo acceder a la URL en el navegador y puedo conectarme a websockets cuando especifico el puerto.

https://ws.site.com// Funciona
wss://ws.site.com // No funciona
wss://ws.site.com:8080 // Funciona

¿Por qué es esto? ¿Qué estoy haciendo mal? Esta es la configuración de nginx

upstream ws.site.com {
    server 127.0.0.1:8080;
}

server {
    listen 443;
    server_name ws.site.com;

    ssl on;
    ssl_certificate /path/ssl-bundle.crt;
    ssl_certificate_key /path/myserver.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {
            access_log off;

            proxy_pass https://ws.site.com;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_read_timeout 86400;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }
}

Respuesta1

El wss://controlador de URL utiliza elpuerto predeterminado de WebSockets, que es 443 si no agrega un sufijo de puerto por su cuenta. Si lo ejecuta en uno que no sea el predeterminado (8080), necesitará el sufijo del puerto.

Respuesta2

El problema está en tu configuración.

Su upstream se está ejecutando en el puerto 8080:

upstream ws.site.com {
    server 127.0.0.1:8080;
}

Y le está diciendo que busque en el puerto https (443):

proxy_pass https://ws.site.com;
proxy_redirect off;

arreglarlo conhttp://ws.site.com

Tabla de puertos simple:

  • puerto 80: http, ws
  • puerto 443: https, wss

información relacionada