【问题标题】:Socket IO cross sub-domain handshake failsSocket IO 跨子域握手失败
【发布时间】:2019-11-27 05:54:27
【问题描述】:
failed: Error during WebSocket handshake: Unexpected response code: 502

我有 2 个子域指向同一个服务器,一个用于响应应用程序,另一个用于提供套接字 IO 连接的 API

我在浏览器控制台中不断收到此错误

我在我的 apache 日志中发现了这些错误:

AH00898: Error reading from remote server returned by /socket.io/
AH01102: error reading status line from remote server 0.0.0.0:3040

这是我的apache 配置,我正在使用ProxyPass

ProxyPreserveHost On

ProxyPass / http://0.0.0.0:3040/
ProxyPassReverse / http://0.0.0.0:3040/

在我的前端,我使用socket.io-client 连接:

let socket = io(process.env.GATSBY_CHATBOT_SOCKET_URL, {transports: ['websocket', 'xhr-polling']});

我的nodejs 服务器使用socket.io

const https = require('https');

let options = {
    key: fs.readFileSync(process.env.PRIV_KEY_PATH),
    cert: fs.readFileSync(process.env.SSL_CERTIFICATE_PATH),
    passphrase: process.env.PASSPHRASE,
};

let server = https.createServer(options, app).listen(process.env.PORT, function () {
    console.log('listening on https port: ' + process.env.PORT);
});

let ioOptions = {
    pingInterval: 10000,
    pingTimeout: 60000,
    origins: process.env.NODE_ENV === 'local' ? null : '*.mydomain.com',
    transports: ['websocket', 'xhr-polling'],
};

let io = new require('socket.io')(server, ioOptions);

我在这里缺少什么?为什么我的 websocket 握手不能正常工作?

【问题讨论】:

  • 您是否设置了apache 来升级连接?
  • @EslamAbuHugair 升级连接是什么意思?

标签: node.js sockets socket.io apache2


【解决方案1】:

我发现了问题,其实很简单

  1. 确保您已开启 SSLProxyEngine

    • ProxyPass 行之前添加SSLProxyEngine on
  2. 确保设置标题

    • 添加Header set Access-Control-Allow-Origin "https://YOURDONAIN.com"

这对我进行了整理,我希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2015-08-02
    • 2018-07-28
    • 2017-06-19
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多