在本地运行时,http server, websocket, 以及tcp socket(net.Socket)都可以,但是部署到nginx上,tcp socket就一直访问不到。 不知道是哪里出来问题,求帮忙。。
这是server文件
这是tcp socket文件
这是nignx配置 tcp socket内容
目前 https 和 websocket都配置oK ,就是 TCP socket怎么都不行 已经用源码方式 安装了–with–stream
表示关注,我写了一个socket.io服务端,测试性能不太好,可以交流下。
关注一下
mark
不用代理,直接连你那个 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_header
和 proxy_http_version
。
参考:https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/