Nginx中需用location匹配路径并配合fastcgi_pass转发至PHP-FPM,关键在匹配类型选择(=、^~、正则、前缀)、SCRIPT_FILENAME路径准确设置及include fastcgi_params;调试须验证语法、服务状态与日志。

在 Nginx 中,要将特定路径(比如 /api/ 或 /index.php)交由 PHP-FPM 解析,核心是用 location 块匹配请求路径,再通过 fastcgi_pass 将请求转发给 PHP-FPM 进程。关键在于匹配方式、路径传递和 FastCGI 参数配置是否准确。
明确 location 匹配目标路径
根据需求选择合适的匹配类型:
-
前缀匹配:适合目录级路由,如
location /api/ { ... },匹配所有以/api/开头的请求; -
正则匹配:适合精确控制,如
location ~ \.php$ { ... }匹配以.php结尾的文件; -
精确匹配:如
location = /index.php { ... },只匹配该完整路径,优先级最高。
注意:多个 location 共存时,Nginx 按匹配规则优先级决定使用哪一个,= > ^~ > 正则 > 前缀。
正确设置 fastcgi\_pass 和相关参数
fastcgi_pass 指向 PHP-FPM 的监听地址(如 127.0.0.1:9000 或 unix:/var/run/php/php8.1-fpm.sock),但仅靠它不够,还需配合标准 FastCGI 参数:
立即学习“PHP免费学习笔记(深入)”;
- 必须设置
fastcgi_param SCRIPT_FILENAME,告诉 PHP 实际脚本的绝对路径,常用写法:fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
或更稳妥的:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - 推荐包含官方推荐的 FastCGI 配置文件:
include fastcgi_params;(位于/etc/nginx/fastcgi_params); - 若用
alias或重写改变了路径,需确保$document_root或$realpath_root指向正确的磁盘路径。
常见组合示例
示例 1:所有 .php 文件走 PHP-FPM
location ~ \.php$ {
root /var/www/example;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
示例 2:仅 /api/ 下的 PHP 请求交由 PHP 处理(内部路由)
location /api/ {
alias /var/www/example/api/;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
注意这里用了 $request_filename,因 alias 会改变文件路径映射,$document_root$fastcgi_script_name 不再准确。
调试与验证要点
配置后务必检查并测试:
- 运行
nginx -t确认语法正确; - 重启 Nginx:
systemctl reload nginx; - 访问目标路径(如
/test.php),查看是否返回 PHP 输出而非源码或 404; - 查 Nginx 错误日志(
/var/log/nginx/error.log),常见报错如 “No input file specified” 通常因SCRIPT_FILENAME路径错误导致; - 确认 PHP-FPM 服务正在运行且监听地址可被 Nginx 访问(权限、SELinux、防火墙等)。



















