phpenv的nginx不走conf.d,因其主配置未include该目录,实际生效路径通常为/phpenv/nginx/conf/nginx.conf,且include指令指向extra/或vhost/等自定义子目录。

phpEnv 的 Nginx 配置不走 conf.d?先确认实际生效路径
phpEnv 默认不是标准 Nginx 发行版,它的配置结构被封装过,/etc/nginx/conf.d/ 很可能根本没被 include。直接往里丢 xxx.conf 文件不会生效,这是最常踩的坑。
真实配置入口通常在:/phpenv/nginx/conf/nginx.conf(或类似路径,取决于安装位置),里面一般只有极简主配置,且 include 指令指向的是它自己定义的子目录,比如 extra/ 或 vhost/,而非系统默认的 conf.d。
- 运行
phpenv nginx -t或/phpenv/nginx/sbin/nginx -t查看实际加载的主配置路径 - 打开该
nginx.conf,搜include,确认它包含的是哪个目录(常见如include extra/*.conf;) - 所有二级域名配置必须放在这类被明确 include 的目录下,文件名以
.conf结尾
二级域名 server 块里用 root 还是 alias?看目录层级关系
如果二级域名要指向 /phpenv/www/test1/,而该目录本身是完整站点(含 index.php、public/ 等),就用 root;如果只是想把某个子目录“映射”为根访问路径(比如让 test1.test.cn 访问效果等同于 www.test.cn/test1/),才考虑 alias —— 但后者极易出路径拼接错误,不推荐用于二级域名独立站点。
-
root /phpenv/www/test1;:请求test1.test.cn/css/app.css→ 实际读取/phpenv/www/test1/css/app.css -
alias /phpenv/www/test1/;:必须加结尾斜杠,且 location 必须精确匹配(如location / { alias /phpenv/www/test1/; }),否则 404 风险极高 - 绝大多数二级域名场景应无条件选
root,语义清晰、容错强
PHP-FPM 路径解析失败?关键在 fastcgi_param SCRIPT_FILENAME
即使 Nginx root 设置正确,PHP 文件仍报 “File not found”,大概率是 PHP-FPM 收到的脚本路径错了。phpEnv 自带的 fastcgi_params 模板可能没适配自定义 root,需手动补全。
在你的二级域名 .conf 文件中,location ~ \.php$ 块内必须显式设置:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- 别依赖全局 fastcgi_params 里的旧值,phpEnv 的模板常写死为
$realpath_root或错误路径 -
$document_root是当前 server 块的 root 值,动态准确;$fastcgi_script_name是 URI 中的 .php 文件部分 - 漏掉这行,PHP-FPM 就会尝试在默认根目录找文件,必然 404
重启不生效?phpEnv 的 reload 命令有陷阱
phpEnv 的 Nginx 控制脚本(如 phpenv nginx restart)有时只杀进程再拉起,不触发平滑 reload,导致配置未真正加载。更稳妥的方式是直连二进制:
- 先用
/phpenv/nginx/sbin/nginx -t确认语法无误 - 再执行
/phpenv/nginx/sbin/nginx -s reload(注意是-s reload,不是restart) - 如果提示 “no nginx.pid”,说明主进程没写 pid 文件,需检查
nginx.conf中pid指令是否启用且路径可写 - 改完配置后,务必用
ps aux | grep nginx看 worker 进程启动时间是否更新
复杂点在于 phpEnv 把 Nginx 和 PHP-FPM 绑定管理,但二级域名涉及两者的路径协同,任一环节路径写错,错误现象都一样:白屏或 404,排查时得两边日志(nginx/error.log 和 php-fpm.log)对照着看。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











