node.js-WebSocket与“ ws://…/socket.io/”的连接失败:WebSocket握手时出错:net :: ERR_CONNECTION_RESET

发布时间:2020-01-14 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了node.js-WebSocket与“ ws://…/socket.io/”的连接失败:WebSocket握手时出错:net :: ERR_CONNECTION_RESET 脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用nginx并代理到我的应用程序,该应用程序在node.js上使用socket.io进行websocket连接.

通过域访问应用程序时出现上述错误.

我已根据https://github.com/socketio/socket.io/issues/1942配置了nginx以确保将websocket正确代理到node.js后端.

我的nginx配置如下:

server {
    listen 80;
    server_name domain.com;

    location / {
        proxy_pass http://xxx.xx.xx.xx:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

在我的react客户端中,我以这种方式启动websocket连接:

import io from 'socket.io-client';

componentWillMount() {
    this.socket = io();
    this.socket.on('data',(data) => {
        this.state.output.push(data);
        this.setState(this.state);
    });
}

任何建议表示赞赏!

编辑1:

经过更多调查.

我的服务器设置如下:

可从互联网访问的域名:web-face.domain.com
可从Intranet访问的域:internal.domain.com

当我从Intranet访问该应用程序时,它可以正常工作,但从Internet访问时出现错误.

我怀疑这是由于使用this.socket = io()创建了套接字,该套接字与当前域建立了套接字连接.

由于节点中的套接字正在监听ws://internal.domain.com,因此当通过web-face.domain.com连接时,会创建错误的套接字ws://web-face.domain.com.

所以现在的问题是,当从其他域访问时,如何创建内部域的套接字?

编辑2:

我添加了app.set(‘trust proxy’,true)来配置Express接受代理连接,但是它仍然无法正常工作.

最佳答案
事实证明,我无法控制服务器前面还有另一个反向代理.
将我的服务器设置更改为直接面向互联网,并且可以正常工作.

总结

以上是脚本之家为你收集整理的node.js-WebSocket与“ ws://…/socket.io/”的连接失败:WebSocket握手时出错:net :: ERR_CONNECTION_RESET 全部内容,希望文章能够帮你解决node.js-WebSocket与“ ws://…/socket.io/”的连接失败:WebSocket握手时出错:net :: ERR_CONNECTION_RESET 所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。

脚本之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ” ,选择关注!
精选程序员所需精品干货内容!

标签:nginx