nginx 配置文件历史 – fastcgi_params 与 fastcgi.conf

0

首先这是一个历史遗留问题,这篇文章没有什么技术点,只是对刚接触 nginx 的同学解开一点可能遇到的困惑。

在诸多发行版中默认 nginx 安装后你会发现在 /etc/nginx 目录下有两个fastcgi配置文件,fastcgi_params 与 fastcgi.conf,运行diff后你会发现他们的区别只有一行,既fastcgi.conf多了一个fastcgi_params配置

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

SCRIPT_FILENAME 参数对PHP的运行是必不可少的,它的作用是告诉后端 PHP 应该执行哪个文件,但是由于历史原因他并没有被添加到 fastcgi_params 中。

在 nginx 0.6.x 时代,nginx 提供的默认配置中使用的是硬编码的方式

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /var/www/foo$fastcgi_script_name;
    fastcgi_pass backend;
}

这对迁移造成了不必要的麻烦,后来 nginx 建议大家使用 $document_root 来替代真实路径,大家慢慢开始使用它来替换之前的硬编码方式,但是很多年以后很多人依然在使用绝对路径,于是 nginx 在 0.8.30 中开始提供一个新的配置文件 fastcgi.conf来保持向后兼容,这样以来社区就可以推荐大家使用 fastcgi.conf 不需要在 location 中手动添加 SCRIPT_FILENAME。

现在我们引入这个文件可以使用下面的方式

location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass backend;
}

如果你发现你的配置文件是

location ~ \.php$ {
    include fastcgi_params;
    SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass backend;
}

那也不用着急去修改自己的配置文件,无论使用这两种的哪一种,对 nginx 来说都是一样的。

发表评论

您的邮箱不会公开,当您的评论有新的回复时,会通过您填写的邮箱向您发送评论内容。 必填字段 *

为何看不到我发布的评论?

正在提交, 请稍候...