socket.io + tcp socket + nginx 部署问题
发布于 7 年前 作者 wardenger 7074 次浏览 来自 问答

在本地运行时,http server, websocket, 以及tcp socket(net.Socket)都可以,但是部署到nginx上,tcp socket就一直访问不到。 不知道是哪里出来问题,求帮忙。。

这是server文件

屏幕快照 2017-09-01 上午12.07.57.png

这是tcp socket文件 屏幕快照 2017-09-01 上午12.10.29.png

这是nignx配置 tcp socket内容

屏幕快照 2017-09-01 上午12.12.54.png

目前 https 和 websocket都配置oK ,就是 TCP socket怎么都不行 已经用源码方式 安装了–with–stream

12 回复

表示关注,我写了一个socket.io服务端,测试性能不太好,可以交流下。

不用代理,直接连你那个 9010 端口是正常的么?

@yszou 连接不上,试过查看 防火墙的命令,显示的是未激活。

@wardenger 那先把系统层面的这些问题解决吧,你自己随便 http-server 到指定端口,确定端口访问是通的。 (如果你是用的阿里云的机器,后台“安全策略”那里可以处理端口问题)

@yszou 阿里云的安全策略默认是开启的。不过确实可以 telnet 443 和 80 ,9000端口 返回的是 timeout。

@wardenger 9000 ?我说的是 9010 。 你 nginx 的 upstream 写的是 9010 啊。(你打码后面那里) 同时你 nginx 监听的是 9000 ,但是你的 node 代码好像也是 9000 ,如果你截图是真实情况,那端口冲突了。

嗯。弄好了。
有两个点 一个点是阿里云的安全配置,socket连接需要单独配置。 第二个点就是 nginx upstream 里面应该写socket的监听地址。

啊啊啊,非常感谢。弄了好久。。 @yavana

一可能是防火墙 二可能是跨域了

@qingmingsang 已经弄好了,不是防火墙,防火墙是未激活的(我看了那个命令)。然后跨越也不是。还是感谢~

应该要在配置中升级协议。

    location / {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://socket_nodes;
    }

注意上面的两个 proxy_set_headerproxy_http_version

参考:https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/

回到顶部