fastcgi.conf是nginx预定义的fastcgi参数集,核心作用是通过fastcgi_param script_filename $document_root$fastcgi_script_name确保php-fpm准确定位脚本路径;它必须在location ~ \.php$ { }块内配合root(或alias)和fastcgi_pass指令使用,直接include fastcgi.conf即可,无需绝对路径。

fastcgi.conf 本身是 Nginx 自带的预定义配置片段文件,不是需要“手动配置”的主配置文件,而是供你在 location ~ \.php$ { } 块中通过 include 引入的标准参数集。它的作用很明确:确保 PHP-FPM 能正确拿到脚本的绝对路径和其他必要环境变量。
你不需要重写或大幅修改它,但必须理解怎么用、在哪用、为什么用。
fastcgi.conf 的核心定位
- 它位于
conf/fastcgi.conf(典型路径如/etc/nginx/conf/fastcgi.conf或/usr/local/nginx/conf/fastcgi.conf) - 内容本质是一组
fastcgi_param指令,比fastcgi_params多一行关键设置:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- 这一行决定了 PHP 是否能定位到真实
.php文件——缺了它,常见报错就是 “No input file specified” 或 502。
正确引入 fastcgi.conf 的写法
必须满足三个前提条件,否则 include 无效:
- ✅ 在匹配 PHP 的
location块内(如location ~ \.php$ { }) - ✅ 已设置
root或alias,保证$document_root有值 - ✅ 已配置
fastcgi_pass指向 PHP-FPM(如127.0.0.1:9000或unix:/var/run/php/php8.2-fpm.sock)
标准写法示例:
location ~ \.php$ {
root /var/www/example.com;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf; # ← 关键:直接包含即可
}
⚠️ 注意:不要写成
include /etc/nginx/conf/fastcgi.conf(路径冗余且易出错),Nginx 的include默认在conf/目录下查找,直接写fastcgi.conf就行。
什么时候不能直接用 fastcgi.conf?
以下情况需调整路径逻辑,否则 $document_root$fastcgi_script_name 会拼错:
-
使用
alias代替root(比如alias /var/www/app/public;)
→ 此时$document_root是空的,应改用$request_filename:fastcgi_param SCRIPT_FILENAME $request_filename;
-
多级子目录部署(如站点入口在
/subdir/index.php)
→ 确保root指向的是web 入口所在父目录,而非项目根目录。例如:root /var/www; # 不是 /var/www/myapp location /myapp/ { alias /var/www/myapp/public/; location ~ \.php$ { include fastcgi.conf; fastcgi_param SCRIPT_FILENAME $request_filename; # ← 更可靠 } }
fastcgi.conf 和 fastcgi_params 怎么选?
| 场景 | 推荐用法 |
|---|---|
| 新建 PHP 站点,希望开箱即用 |
include fastcgi.conf(含 SCRIPT_FILENAME) |
| 继承旧配置、或需最小化控制变量 |
include fastcgi_params + 手动加 fastcgi_param SCRIPT_FILENAME ...
|
安全加固要求禁用某些变量(如 PATH_INFO) |
可复制 fastcgi.conf 到自定义路径,删减后再 include
|
? 提示:
fastcgi.conf.default是原始备份,别动它;日常维护只改fastcgi.conf或另存为新文件引用。
不复杂但容易忽略。











