Подключиться к серверу websocket без указания порта

Подключиться к серверу websocket без указания порта

Я пытаюсь создать безопасный сервер node.js без сервера websocket на том же порту. Порт — 8080.

Я могу получить доступ к URL-адресу в браузере и подключиться к веб-сокетам, указав порт.

https://ws.site.com// Работает
wss://ws.site.com // Не работает
wss://ws.site.com:8080 // Работает

Почему это? Что я делаю не так? Это конфиг 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";
    }
}

решение1

Обработчик URL wss://используетпорт WebSockets по умолчанию, который равен 443, если вы не добавляете суффикс порта самостоятельно. Если вы запускаете его на порте, отличном от порта по умолчанию (8080), вам нужен суффикс порта.

решение2

Проблема в ваших настройках.

Ваш апстрим работает на порту 8080:

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

А вы говорите смотреть на порт https (443):

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

Исправьте это с помощьюhttp://ws.site.com

Простая таблица портов:

  • порт 80: http, ws
  • порт 443: https, wss

Связанный контент