Hostinger VPS+CloudPanel+Nginx部署PHP WebSocket连接失败求助
排查WebSocket服务部署问题的步骤
1. 检查服务端绑定地址
本地测试时绑定127.0.0.1或localhost可正常访问,但VPS上必须绑定0.0.0.0才能允许外部连接。打开你的socket.php,找到socket_bind代码行,确认绑定地址为:
socket_bind($socket, '0.0.0.0', 9000);
若绑定的是127.0.0.1,服务仅能被VPS本地访问,外部浏览器无法建立连接。
2. 验证端口监听状态
执行以下命令检查9000端口是否被PHP进程正确监听:
ss -tulpn | grep 9000
如果输出中看不到php进程和0.0.0.0:9000的记录,说明服务未成功启动或绑定地址错误。此时可执行php -l socket.php检查脚本语法是否存在错误。
3. 双重检查防火墙规则
除UFW外,Hostinger VPS自带硬件防火墙(在Hostinger后台的VPS管理面板中),需确保9000端口在两处都已开放:
- UFW规则:执行
ufw status确认9000/tcp已被允许 - Hostinger硬件防火墙:登录Hostinger后台,找到VPS防火墙设置,添加允许9000端口的入站规则
4. 修正Nginx代理与SSL配置
普通PHP Socket脚本默认不处理SSL,直接用wss://mysite.app:9000/wsapp/连接会失败。正确做法是让Nginx做SSL终止,客户端通过443端口连接wss,由Nginx代理到后端的ws服务:
示例Nginx配置(适配你的域名):
server { listen 443 ssl; server_name mysite.app; # SSL证书配置(CloudPanel一般会自动生成,确保路径正确) ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; location /wsapp/ { proxy_pass http://localhost:9000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
配置完成后,客户端应连接wss://mysite.app/wsapp/(无需添加9000端口)。
5. 检查PHP环境依赖
- 确认
sockets扩展已启用:执行php -m | grep sockets,若无输出,需在CloudPanel的PHP设置中勾选启用该扩展 - 版本兼容性:确保VPS上的PHP版本与本地测试环境一致,避免版本差异导致的语法或函数兼容问题
6. 排查进程运行限制
- 执行
getenforce检查SELinux状态,Ubuntu默认关闭,若显示Enforcing,可临时执行sudo setenforce 0测试,或添加允许PHP监听端口的规则 - 确保执行
php socket.php的用户(如www-data或你的SSH用户)无系统网络权限限制
7. 测试基础连接
先在VPS本地测试ws连接,执行:
wscat -c ws://localhost:9000/wsapp/
若本地能连接,说明服务端正常,问题出在外部网络或SSL配置;若本地也连不上,需进一步调试socket_accept卡住的原因(如脚本死循环、资源占用等)
内容的提问来源于stack exchange,提问作者RedStar Entertainment
相关产品推荐
相关产品推荐

