ERR_CONNECTION_REFUSED 错误源于本地 Web 服务未运行、穿透客户端配置端口不匹配、远端中继服务未监听或防火墙拦截,需依次验证服务进程、端口一致性、server 状态及网络连通性。
phpEnv 本身不报 Connection refused,这个错误一定来自你配置的穿透服务或目标服务本身。
它不是 phpEnv 的 bug,而是你本地启动的服务(比如 Apache/PHP 内置服务器)没起来,或穿透客户端没连上远端中继服务器,或远端中继服务根本没在监听指定端口。
确认本地 Web 服务是否真实运行
phpEnv 只是环境管理器,它不自动启动 Web 服务。你必须手动启动,否则穿透客户端连的是“空地址”。
执行
启动内置服务器时,终端必须保持运行状态;关掉终端就等于停服
用 phpEnv 启动 Apache 后,要验证进程是否存在:
(Linux/macOS)或任务管理器里搜
(Windows)
浏览器直接访问
或
,能打开才说明服务真活了;打不开就别急着配穿透
检查 frp/nps 客户端配置中的 local_port 是否匹配本地服务端口
这是最常踩的坑:本地服务监听 8000,但配置里写成
,客户端就会向一个没人监听的端口发请求,自然被拒绝。
frp 客户端配置段里,
必须和你实际启动的 PHP/Apache 端口完全一致
nps 客户端的
字段格式为
,不能漏掉 IP 或写错冒号
改完配置后,必须重启客户端进程,
或杀掉旧进程再跑新命令
验证穿透服务端(server)是否正常接受连接
内网穿透是两端协作:client 把流量送出去,server 得接得住。server 挂了、防火墙拦了、token 错了,都会让 client 收到 Connection refused。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
登录服务器,检查服务进程:frp 用
,nps 用
确认 server 监听的是公网 IP 或
,而不是仅
(后者只能本机连)
检查云服务器安全组/防火墙:确保
(如 7000)对公网开放,且协议是 TCP
核对 client 配置里的
和 server 配置文件中
是否一字不差(大小写敏感)
用 telnet 或 nc 快速定位断点在哪一环
别靠猜,用底层工具直连测试,30 秒就能分清是 client 连不上 server,还是 server 连不上你的 local_port。
在本地机器上执行:
(frp 的 server_port)→ 如果通,说明 client 到 server 链路 OK;如果 Connection refused,问题出在 server 端或网络策略
在服务器上执行:
→ 如果不通,说明你本地服务根本没起来,或没绑定到 127.0.0.1
在服务器上执行:
(Linux/macOS)或下载
(Windows)做同样测试
真正卡住的地方,往往不是配置写错了,而是某处进程没拉起来、某个端口被系统级防火墙静默丢包、或者 token 复制时多了一个不可见空格。每次改完,只动一个变量,然后用 telnet 验证,比反复重启整个链路更省时间。
php -S 127.0.0.1:8000ps aux | grep httpdhttpd.exehttp://127.0.0.1:8000http://localhost:80local_port = 8080local_porttarget127.0.0.1:8000systemctl restart frpcps aux | grep frpsps aux | grep nps0.0.0.0127.0.0.1server_porttokenauth_tokentelnet your-server-ip 7000telnet 127.0.0.1 8000nc -zv 127.0.0.1 8000ncat.exe