Nginx 通过 location + alias 或 root 即可实现虚拟目录映射,无需改动 PHP 版本或重装 Nginx;alias 剥离 URL 前缀挂载独立子应用(如 /admin/ → /var/www/admin/),root 拼接路径适用于同构子站(如 /blog/ → /var/www/blog/),配置后须严格验证权限、路径存在性及日志中的实际文件路径。

直接用 location + alias 或 root 就能实现,不需要改 PHP 版本或重装 Nginx。PHP 8.3 只负责处理 .php 请求,路径映射完全由 Nginx 控制。
用 alias 挂载独立 PHP 子应用(比如 /admin/)
适合把一个已打包、有自己入口(如 index.php)的 PHP 项目挂到子路径下,URL 前缀要被完全剥离:
-
location必须以斜杠结尾:location /admin/ { ... } -
alias后必须是绝对路径且以斜杠结尾:alias /var/www/admin/; - 请求
/admin/index.php→ 实际读取/var/www/admin/index.php(/admin/被去掉) - PHP 的
$_SERVER['SCRIPT_NAME']会是/index.php,不是/admin/index.php,这点会影响部分框架的路由判断 - 记得在
location /admin/块里单独配 PHP 处理逻辑,不能复用外层的location ~ \.php$
示例:
location /admin/ {
alias /var/www/admin/;
index index.php;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
用 root 配置同构子站(比如 /blog/、/docs/)
适合多个结构相似的站点共用同一级目录管理,Nginx 会自动拼接 URL 路径:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
立即学习“PHP免费学习笔记(深入)”;
-
location /blog/ { root /var/www; }→ 请求/blog/index.php对应文件是/var/www/blog/index.php - 不用在
root后加/blog,Nginx 自动补上 - PHP 文件里的相对资源引用(如
css/style.css)默认按当前 URL 路径解析,一般无需调整 - 如果子站用了重写(如 WordPress),
try_files要写成try_files $uri $uri/ /blog/index.php?$args,否则伪静态失效
PHP-FPM socket 路径和权限必须匹配 PHP 8.3
Ubuntu/Debian 下 PHP 8.3 FPM 默认 socket 是 /run/php/php8.3-fpm.sock,CentOS/RHEL 可能是 /run/php-fpm/www.sock。不匹配会报 connect() failed (111: Connection refused) 或 Permission denied:
- 确认 socket 文件存在:
ls -l /run/php/php8.3-fpm.sock - 检查 socket 所属用户组是否与 Nginx worker 进程一致(通常是
www-data或nginx) - PHP-FPM 配置中
listen.owner和listen.group必须和 Nginx 用户一致 - 若用 TCP 端口(如
127.0.0.1:9000),确保php-fpm.conf中listen = 127.0.0.1:9000且未被防火墙拦截
容易忽略的三件事:权限、路径、日志验证
配置写对了,不代表能跑起来:
- Nginx 工作进程用户(如
www-data)必须对目标目录有r-x权限,父目录也得有x(否则进不去) -
alias后的路径必须是**真实存在的绝对路径**,Nginx 不会自动创建目录 - 开启
error_log /var/log/nginx/error.log debug;,看日志里open()调用的实际文件路径是不是你预期的——这是定位 404 或 403 的最快方式
最常卡住的地方不是语法,而是 alias 少了末尾斜杠、socket 权限没对齐、或者目录所有者没加进 www-data 组。


















