phpEnv不参与端口路由,实际由Nginx配置控制;改配置后需重载或重启服务,确认路径为C:phpEnv ginxconf,并检查fastcgi_pass与PHP-FPM监听方式是否一致。

phpEnv 本身不直接参与 Nginx 的端口路由,它只是 Windows 下集成 PHP + Nginx + MySQL 的环境套件。真正做端口分发的是你本地运行的 nginx.exe 配置。如果你在 phpEnv 中改了 Nginx 配置却没生效,大概率是没重载配置、没重启服务,或配置写在了错误文件里。
确认 phpEnv 使用的 Nginx 配置路径
phpEnv 默认把 Nginx 配置放在:C:phpEnv
ginxconf
ginx.conf 或 C:phpEnv
ginxconfhost 下的 .conf 文件。别去改系统级的 /etc/nginx/(那是 Linux 路径),也别误改 nginx.conf.default —— 它只是模板。
- 打开 phpEnv 主界面 → 点击「Nginx」→ 「配置文件」,会自动跳转到真实生效的配置目录
- 若用
server_name匹配域名(如dev.site-a.com),必须确保hosts文件已添加对应映射:127.0.0.1 dev.site-a.com - phpEnv 的 Nginx 默认监听
80和443,若要启用8080等端口,需手动在listen指令中显式写出,不能依赖“自动开启”
用 listen + server_name 实现 Host 分发到不同端口
这不是“根据 Host 分发到端口”,而是:**同一请求进来后,由 Nginx 根据 Host 头 + listen 端口共同决定走哪个 server 块**。常见错误是只写 server_name 却忽略端口唯一性。
- 两个
server块不能都listen 80且server_name a.test b.test—— 这属于基于域名的虚拟主机,不是端口分发 - 正确做法是让它们监听不同端口,并允许相同
server_name(甚至用通配符_):server { listen 8080; server_name _; root C:/www/site-a; index index.php; } server { listen 8081; server_name _; root C:/www/site-b; index index.html; } - Windows 下注意路径分隔符用正斜杠
/或双反斜杠\,单反斜杠会导致nginx -t报错
phpEnv 中 PHP-FPM 的端口与 fastcgi_pass 必须对齐
如果你的站点要跑 .php 文件,location ~ .php$ 块里的 fastcgi_pass 必须指向 phpEnv 实际启动的 PHP-FPM 地址。默认是 127.0.0.1:9000,但部分 phpEnv 版本会改用 socket(如 unix:C:/phpEnv/php/tmp/php-fpm.sock)。
立即学习“PHP免费学习笔记(深入)”;
- 查 phpEnv 启动日志或界面状态栏,确认 PHP-FPM 监听的是 TCP 还是 Unix socket
- 若用 TCP,
fastcgi_pass 127.0.0.1:9000;;若用 socket,fastcgi_pass unix:C:/phpEnv/php/tmp/php-fpm.sock; - 路径中含空格或中文?Nginx 在 Windows 下对这类路径支持不稳定,建议全部使用英文无空格路径
改完配置后 reload 不生效?检查这三件事
phpEnv 的「重载 Nginx」按钮有时只是调用 nginx -s reload,但它依赖 nginx 进程已运行且 PID 文件存在。很多问题卡在这一步。
- 先用任务管理器结束所有
nginx.exe进程(包括 master 和 worker),再点 phpEnv 的「启动 Nginx」 - 执行
C:phpEnv ginx ginx.exe -t手动验证语法 —— 错误信息比界面提示更具体 - 查看
C:phpEnv ginxlogserror.log,常见报错如:bind() to 0.0.0.0:8080 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions),说明端口被占用或权限不足(需管理员运行)
端口路由的本质是 Nginx 的 listen 指令和进程权限控制,phpEnv 只是封装层。最容易被忽略的点是:Windows 下非管理员身份启动的 Nginx 无法绑定 1024 以下端口,而 80、443 就在此列 —— 如果你看到端口绑定失败却没报权限错误,八成是这个原因。



















