phpenv 不支持自定义 nginx vhost,因其使用阉割版 nginx,nginx.conf 无 include 指令且无 http 块结构,vhost 目录仅为伪目录;多站点需手动修改主配置并避免被覆盖,真正需求应换用原生 nginx + php-fpm。

phpEnv 不支持直接配置自定义 Nginx vhost —— 它的 Nginx 是封装在启动脚本里的精简版,没有开放 conf 目录挂载或 include 机制。你看到的 vhost 文件夹(如 phpenv\vhost\)只是伪目录,实际不会被 Nginx 加载。强行改它没用,重启后常被覆盖或忽略。
为什么 phpEnv 的 nginx.conf 里找不到 include vhost/*.conf?
phpEnv 使用的是预编译、阉割版 Nginx(常见于 Windows 下的绿色包),其 nginx.conf 通常硬编码 root 和 location 规则,且删掉了 include 指令和 events/http 分离结构。你用 notepad++ 打开 phpenv\nginx\conf\nginx.conf,大概率只看到类似这样的片段:
server {
listen 80;
server_name localhost;
root "D:/phpenv/www";
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
这里没有 include vhost/*.conf,也没有 http { ... } 外层包裹,意味着你无法通过常规方式引入独立 vhost 配置。
想配多个域名或自定义路径?只能改主 nginx.conf,且要避开自动重写
phpEnv 启动时可能调用内部脚本(如 start.bat 或 phpenv.exe)动态生成或校验 nginx.conf。直接修改后若被覆盖,原因通常是:
- phpEnv 检测到
nginx.conf被手动修改,下次启动时按模板还原 - 使用了“一键切换 PHP 版本”功能,触发全量配置重写
- Windows 权限问题导致保存失败,看似改了实则没写入
可行做法:
- 关闭 phpEnv 自带的“自动配置同步”(如有设置项)
- 备份原始
nginx.conf,每次修改后用nginx -t测试语法,再nginx -s reload - 添加多站点时,用
server块并列写法,别删默认块(否则 phpEnv 可能报错退出)
例如加一个本地测试站:
server {
listen 80;
server_name test.local;
root "D:/projects/test";
index index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
真正需要独立 vhost 管理?换用原生 Nginx + PHP-FPM
phpEnv 的定位是快速启停的开发玩具,不是生产级环境。一旦你需要:
- 每个项目独立
server块 + SSL 配置 - 自定义 log 路径、access_log 格式
- location 精细控制(如 ThinkPHP 的 pathinfo 模式)
- 与系统服务集成(systemd / service 管理)
就该放弃 phpEnv,直接部署标准 Nginx(从 nginx.org 下载)+ PHP-FPM(非 php-cgi.exe)。这时你才能自由使用:
include /etc/nginx/conf.d/*.conf;include /usr/local/etc/nginx/sites-enabled/*;- 甚至软链管理:
ln -sf /var/www/myapp/nginx.conf /etc/nginx/sites-enabled/myapp
Windows 下也建议用官方 Nginx + php-fpm.exe(PHP 7.4+ 自带),而非依赖 phpEnv 封装层——后者连 fastcgi_read_timeout 这类关键参数都可能被锁死。
最常被忽略的一点:phpEnv 的 php-fpm.exe 默认监听 127.0.0.1:9000,但它的 ini 文件(phpenv\php\php.ini)里不暴露 fpm 配置段,你根本改不了 pm.max_children 或 listen.owner。这种黑盒封装,省事一时,卡住永远。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











