在Bitnami LAMP环境配置WebSocket遇连接拒绝问题求助
咱们一步步排查解决这个连接拒绝的问题,大概率是端口访问限制、绑定地址不对或者客户端地址配置错误导致的:
检查EC2安全组端口开放
AWS EC2的安全组默认会阻止非标准端口的入站流量,你需要手动添加8090端口的允许规则:- 登录AWS控制台,进入EC2实例的安全组设置
- 添加一条入站规则:协议选TCP,端口范围填8090,来源根据需求设置(测试阶段可以暂时设为
0.0.0.0/0允许所有IP访问)
修正PHP Socket脚本的绑定地址
你当前把HOST_NAME设为localhost,这会让脚本只绑定到服务器的127.0.0.1本地回环地址,外部请求根本连不上。把它改成绑定所有网卡的地址:define('HOST_NAME',"0.0.0.0"); define('PORT',"8090");这样脚本才能接受来自EC2公网IP的连接请求。
调整客户端WebSocket连接地址
客户端代码里用ws://localhost:8090只有在你直接在EC2服务器上运行浏览器时才有效,外部客户端访问的话,localhost指的是用户自己的本地机器,不是你的EC2服务器。你需要把地址改成EC2的公网IP或者绑定的域名:var websocket = new WebSocket("ws://你的EC2公网IP:8090/includes/socket_handlers/php-socket.php");检查Bitnami自带防火墙规则
Bitnami环境默认可能启用了ufw防火墙,需要确认8090端口是否被允许:- 登录EC2服务器,执行命令查看防火墙状态:
sudo ufw status - 如果没看到8090端口的允许规则,执行:
sudo ufw allow 8090/tcp - 重启防火墙生效:
sudo ufw reload
- 登录EC2服务器,执行命令查看防火墙状态:
验证端口是否被占用或脚本是否正常运行
可以用以下命令检查8090端口是否被其他进程占用:sudo netstat -tulpn | grep 8090 # 或者用lsof sudo lsof -i :8090如果端口被占用,要么终止占用进程,要么修改PHP脚本里的
PORT值换个未被使用的端口。另外还要确保你的php-socket.php脚本是正常运行的,可以直接在服务器上执行php includes/socket_handlers/php-socket.php启动脚本,看是否有报错。确认PHP sockets扩展已启用
虽然Bitnami的PHP默认一般会启用sockets扩展,但还是可以验证一下:php -m | grep sockets如果没有输出
sockets,需要修改PHP配置文件启用扩展(Bitnami的PHP配置文件一般在/opt/bitnami/php/etc/php.ini,找到sockets相关行去掉注释,然后重启Apache或者PHP-FPM)。
内容的提问来源于stack exchange,提问作者StOchastiC_

