swoole_http_server启动后浏览器打不开,绝大多数情况不是代码问题,而是网络或配置层面的拦截/错配:需检查端口监听状态、防火墙及云安全组放行、enable_static_handler与绝对路径document_root配置正确性、禁用明文http/2等。

swoole_http_server 启动后浏览器打不开,**绝大多数情况不是代码问题,而是网络或配置层面的拦截/错配**。直接看下面几个关键点。
检查服务是否真正在监听目标端口
很多人只看到 php server.php 没报错,就以为服务起来了。但 swoole_http_server 启动失败时可能静默退出(比如端口被占、权限不足、没开 enable_static_handler 却访问了静态文件)。
验证方法:
- 运行
netstat -tuln | grep :8090(把8090换成你实际用的端口),看有没有LISTEN状态 - 用
curl -v http://127.0.0.1:8090在本机测试——如果curl通但浏览器不通,基本可锁定是网络层问题 - 启动脚本末尾加
echo "Server started on " . self::HOST . ":" . self::PORT . "\n";,确认构造函数执行到了start()
防火墙和云服务器安全组必须放行端口
本地开发用 127.0.0.1 通常没问题;但一旦绑 0.0.0.0 或公网 IP,Linux 防火墙(iptables/firewalld)和云厂商安全组会双重拦截。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- CentOS 7+:运行
sudo firewall-cmd --permanent --add-port=8090/tcp && sudo firewall-cmd --reload - Ubuntu:用
sudo ufw allow 8090 - 阿里云/腾讯云/AWS:进控制台找「安全组」→「入方向规则」→ 添加 TCP 端口
8090,源 IP 建议先设为0.0.0.0/0测试(上线前收紧) - 注意:有些 VPS 默认关闭所有非标准端口,
80/443可能通,但9501、8090必须手动开
enable_static_handler 和 document_root 配置不匹配导致 404
浏览器访问 http://x.x.x.x:8090/index.html 报 404,常见原因不是路由写错,而是静态资源处理没生效。
-
enable_static_handler必须设为true(布尔值,不是字符串"true") -
document_root路径必须是**绝对路径**,且 PHP 进程有读取权限(比如/www/wwwroot/swoole,不能写成./static或../public) - 路径末尾不要加斜杠:
/www/wwwroot/swoole/是错的,/www/wwwroot/swoole才对 - 检查该目录下是否存在请求的文件,比如访问
/index.html就得有/www/wwwroot/swoole/index.html
HTTP/2 配置误启导致浏览器拒绝连接
如果你在 $server->set() 里加了 open_http2_protocol => true,但没配 HTTPS,浏览器会直接断连——因为现代浏览器(Chrome/Firefox/Safari)已禁用明文 HTTP/2(h2c)。
- 现象:浏览器空白页、ERR_CONNECTION_CLOSED、curl 显示
HTTP/2 stream 1 was not closed cleanly - 解决:要么删掉
open_http2_protocol,要么上 TLS + ALPN(即用 Nginx 反代或 Swoole 自建 HTTPS) - 验证是否真需要 HTTP/2:普通 API 或页面服务完全用不到;只有高并发流式响应(如 LLM token 流)才值得折腾
document_root 权限校验非常严格,路径错一位、少一个执行位、甚至挂载点用了 noexec 选项,都会让静态文件返回 404 而不报任何错误日志。










