前天写了一个PHP的 websocket服务器,但昨天部署到测试环境时,访问不了,端口绑定的是6044,但就是客户端websocket连接失败
缘起
阿里云安全规则捣鬼
总结
缘起
前天写了一个PHP的 websocket服务器(干嘛还写websocket,不是有现成的库吗?),但昨天部署到测试环境时,访问不了,端口绑定的是6044,但就是html客户端websocket连接失败(外网ip地址加6044端口号)。本地测试没有问题,收发消息测试通过,但部署到服务器后,访问测试失败:

这是咋回事?
分析:
1,首先确认websocket服务端服务是否已打开?
确认后发现,打开着;
2,那是后台一直运行的吗?
确认是(提示用nohup 结合 & 即可);
3,那就是服务器配置了,看下端口是否打开?
确认发现,firewall-cmd 关闭的,那么应该是用的iptable,那继续查下iptable规则,发现都没问题允许一切端口
那这是怎么回事?
到这里我还是觉得端口有问题,因为代码层面不会有问题(吹牛的)。
4,然后我怀疑是Nginx配置问题
但Nginx配置和这应该无关,做个代理而已,调PHP fastcgi程序,跟着6044端口没啥关系啊,而且6044确实处于监听状态。
那这是哪有问题?
阿里云安全规则捣鬼
然后今早问了下朋友,他们服务器Nginx配置(因为还是感觉可能有问题),然后他说应该可以的,他试过,然后我说这问题,要么就是端口没打开,要么就是其他问题,然后刚好提示了他,他说测试环境是不是阿里云的,阿里云服务器默认关闭了所有端口,他也因为这坑过。
然后我测了下tcp连接6044端口(为什么用tcp测试?其实websocket本质来说建立连接后又发了次信息升级协议而已【建立连接仍是经典三次握手操作】),发现不通,那就确认为是阿里云服务器控制台页面没设置打开6044端口了。

最后登录阿里云控制开启端口,测试通过。

总结
本文主要是通过记录一次连接失败,来告诉大家,有时候服务器的供应商方面也得有所了解,减少错误,当然阿里云这么做利大于弊,防止某些公司的服务器的运维人员会不去设置防火墙策略,而出现安全隐患。
你遇到过这个吗?
留一个问题,下面是websocket服务器向客户端发送消息的一段代码,请问为什么要以 "\x81"开头?

点个关注吧~~~~~
关注我,不迷路哦





