phpenv 本身不提供内网穿透能力,必须配合 frp 客户端(frpc)运行才能实现外网访问;frpc 需正确配置 local_ip=127.0.0.1 和与 phpenv 一致的 local_port,同时确保 apache 开放回环访问、配置匹配的 virtualhost 及启用 frps 的 vhost_http_port。

phpEnv 本身不提供内网穿透能力,必须配合 frp 客户端(frpc)运行才能实现外网访问。 你不能在 phpEnv 界面里点几下就“开启穿透”,所有穿透逻辑都由独立的 frpc 进程承担,phpEnv 只是托管了你的 PHP 服务(比如运行在 127.0.0.1:80 或 127.0.0.1:8080),它不参与网络转发。
frpc 配置必须指向 phpEnv 的真实监听地址和端口
phpEnv 默认 Web 服务监听地址不是 0.0.0.0:80,而是 127.0.0.1:80(或你自定义的端口,如 8080)。如果 frpc.ini 中写错 local_ip 或 local_port,frp 就连不上 phpEnv 的服务。
-
local_ip必须设为127.0.0.1(不能写成0.0.0.0或本机局域网 IP) -
local_port要和 phpEnv 控制面板中「网站」→「端口」显示的一致(常见是80或8080) - 若 phpEnv 启用了 HTTPS,且你用
type = https,需确保local_port是 phpEnv 的 HTTPS 监听端口(如443或8443),且证书路径配置正确
phpEnv 的防火墙/安全组常被忽略
即使 frp 连接成功、日志显示 start proxy success,外网仍打不开页面,大概率是 phpEnv 自带的 Windows 防火墙规则或杀毒软件拦截了本地回环(loopback)请求。frp 客户端发请求给 127.0.0.1:80,这个动作会被部分安全软件当成“可疑本地通信”阻断。
- 临时验证:在内网另一台电脑浏览器直接访问
http://[phpEnv所在机器IP]:80,如果打不开,说明 phpEnv 没开外网监听或被防火墙拦了 - 永久解决:在 Windows 防火墙 → “高级设置” → 入站规则中,启用“World Wide Web Services (HTTP Traffic-In)”及相关 loopback 规则
- phpEnv v4+ 版本默认禁用外部访问,需手动编辑
phpEnv\config\apache\httpd.conf,确认Listen 80下有Require all granted且未被Require local覆盖
域名访问时 Apache 虚拟主机必须匹配 custom_domains
如果你用 type = http + custom_domains = demo.phpenv.local,那么 phpEnv 的 Apache 必须能识别这个 Host 头,否则返回 404 或默认站点。
- 不要只改
frpc.ini,还要在phpEnv\config\apache\extra\httpd-vhosts.conf里加对应<virtualhost></virtualhost>块 -
ServerName必须和custom_domains完全一致(区分大小写、无端口) - 重启 phpEnv 的 Apache 服务(不是只重启 frpc),否则新 vhost 不生效
- 若用二级域名(如
test.demo.phpenv.local),需确保 DNS 解析到 frps 所在服务器 IP,且 frps 配置中vhost_http_port已开启(如8080)
最易被忽略的点是:frp 的 http 类型依赖服务端的 vhost_http_port,而很多人只配了 bind_port(7000)就以为够了;另外,phpEnv 的 Apache 默认不监听所有接口,127.0.0.1 绑定 + 防火墙拦截 + vhost 不匹配,这三者叠加会让穿透看似“连上了却打不开”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











