如何在OVH cloud-web-1主机上运行PHP websocket并解决连接失败问题
OVH Cloud Web 1 环境PHP Websocket连接失败排查步骤
1. 端口监听配置校验
- 确认服务端启动时绑定的监听地址不是
127.0.0.1,必须绑定0.0.0.0或者实例公网IP,否则外部请求无法访问 - 执行
netstat -tulpn | grep 你的端口号确认端口处于LISTEN状态,对应的监听地址不是本地回环地址
2. 安全组规则配置
- Cloud Web 1套餐默认仅开放80、443、22等常用端口,自定义端口需要主动在OVH控制台的实例安全组规则中添加入站规则,允许TCP协议对应端口的所有来源(
0.0.0.0/0)访问 - 安全组规则修改后有1-2分钟的生效延迟,修改后等待片刻再测试连接
3. 协议与反向代理配置
- 如果你的站点已经开启HTTPS,浏览器会禁止从HTTPS页面发起非加密的ws请求,必须使用wss协议连接
- 推荐用Nginx反向代理实现wss访问,不需要对外暴露自定义端口,也不需要单独给websocket服务配置SSL证书,在站点Nginx配置中添加以下规则即可:
配置完成后客户端直接用location /ws { proxy_pass http://127.0.0.1:你的websocket服务端口; 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; }wss://你的域名/ws连接即可,同时规避跨域和SSL校验问题
4. 进程常驻配置
- 直接通过SSH启动的PHP脚本会在SSH会话断开后自动终止,需要用
nohup php 你的服务端脚本.php &、systemd配置服务或者screen/tmux托管进程,保证服务端进程后台常驻
5. 跨域配置检查
- 服务端websocket逻辑中需要添加允许跨域的响应头,放行你的站点域名的来源请求,否则浏览器会直接拦截连接。如果使用Workerman、Swoole这类框架,直接在启动配置中添加允许的origin即可
内容的提问来源于stack exchange,提问作者fanodev
相关产品推荐
相关产品推荐

