Подключение к серверу Socket.io

У меня есть веб-сайт на nextjs, и я пытаюсь реализовать функцию звонков с помощью simplepeer. Я так понимаю для этого мне нужен сигнальный сервер и я его создал на основе Socket.io. Я также арендовал облачный сервер с Ubuntu для запуска своего веб-сайта. Внутри локальной сети все работает, но при передаче на сервер подключение к серверу на Socket.io становится невозможным. У меня есть SSL сертификаты и домен (они подключены и сайт в целом доступен из глобальной сети)

Извините, но я заменил свой домен на "domain"

На арендованном сервере использую nginx и проксирование. Вот конфигурация:

server {
    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;
    server_name domain; # managed by Certbot


    location / {
        proxy_pass http://localhost:3000;
        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;
    }

    location /socket.io {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        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;     
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/domain/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

Вот конфигурация сервера сигнализации (после представленных идут просто обработчики событий):

const { Server } = require('socket.io');
const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('/etc/letsencrypt/live/domain/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/domain/fullchain.pem')
};

const httpsServer = https.createServer(options);
const io = new Server(httpsServer, {
path: '/socket.io/',
  cors: {
    origin: '*',
    methods: ['GET', 'POST'],
  },
});

const PORT = process.env.PORT || 3001;
httpsServer.listen(PORT, () => {
  console.log(`Socket.IO server running on port ${PORT}`);
});

И наконец, само подключение к сигнальному серверу:

useEffect(() => {
    const newSocket = io('domain/socket.io/', {
      transports: ['websocket'],
      secure: true,
      rejectUnauthorized: false,
    });

    setSocket(newSocket);

    newSocket.on('connect', () => {
      console.log('Socket.IO Connected!');
    });
};

Ожидание: успешное соединение. Реальность: «Подключение WebSocket к wss://domain.ru/socket.io/?EIO=4&transport=websocket не удалось:»

Я также пробовал писать различные префиксы перед адресом подключения, например wss или https.


Ответы (0 шт):