Ошибка Socket Io при подключении (ошибка во время рукопожатия WebSocket: неожиданный код ответа: 400) - PullRequest
0 голосов
/ 15 декабря 2018

У меня проблема с клиент-серверной стороной Socket.io, у меня есть VPS, и я недавно использовал Certbot для автоматического включения HTTPS в моем домене.Что ж, я использую apache в Debian Jessie и использую URL-адрес, например, «api.domaine.com» с https, включенным из Certbot, я использую Node.js на этом сервере с Express и Socket.io на стороне сервера.

В настоящее время я делаю расширение Chrome с socket.io, который находится на стороне клиента.

Вот моя конфигурация ввода-вывода с сервера:

let PORT = process.env.PORT || 1337;
let server = app.listen(PORT);
let io = require('socket.io').listen(server);

io.sockets.on('connection', function(socket) {
  socket.on('joinRoom', function(room) {
    socket.join(room);
    console.log(io.sockets.adapter.rooms);
    socket.emit('joined', room);
  });
});

И моя линия подключения от клиента вbackground.js:

let socket = io.connect('https://api.domain.com/');

Моя проблема в том, что консоль браузера (Chrome Dev Tool) возвращает это:

WebSocket connection to 'wss://api.domain.com/socket.io/?EIO=3&transport=websocket&sid=T4dxwvDQUX8PvS86AAAF' failed: Error during WebSocket handshake: Unexpected response code: 400

РЕДАКТИРОВАТЬ: Моя конфигурация Virtualhost для SSL:

<IfModule mod_ssl.c>
<VirtualHost *:443>
   ServerName api.domain.com

   ProxyPass / http://0.0.0.0:1337/
   ProxyPassReverse / http://0.0.0.0:1337/
   ProxyPreserveHost On
SSLCertificateFile /etc/letsencrypt/live/api.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/api.domain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

1 Ответ

0 голосов
/ 15 декабря 2018

Я решил это, внеся некоторые изменения и добавив конфигурацию прокси-сервера в конфигурацию SSL Apache Virtualhost моего домена:

<IfModule mod_ssl.c>
<VirtualHost *:443>
   ServerName api.domain.com

   SSLEngine on
   SSLProxyEngine On
   ProxyRequests Off

   ProxyPass / http://0.0.0.0:1337/
   ProxyPassReverse / http://0.0.0.0:1337/
   ProxyPreserveHost On

   SSLCertificateFile /etc/letsencrypt/live/api.domain.com/fullchain.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/api.domain.com/privkey.pem
   Include /etc/letsencrypt/options-ssl-apache.conf

   RewriteEngine on
   RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
   RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
   RewriteRule .* ws://0.0.0.0:1337%{REQUEST_URI} [P]
</VirtualHost>
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...