Fastcgi_params 与 Fastcgi.conf --Nginx 配置的历史(译)

\ 原文地址:
https://blog.martinfjordvald.com/2013/04/nginx-config-history-fastcgi_params-versus-fastcgi-conf/
(由于本人英文很差都是根据单词进行的翻译 不妥之处见谅)

正文:
Nginx的源码安装(通过扩展软件包管理器)包括两个FastCGI配置文件,而在conf目录内的fastcgi_params和fastcgi.conf这两个文件非常的相似。以至于现在仍然会导致新的用户在包管理的问题上产生混淆。

两个文件在源代码中的区别是:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

两个文件在大多数包管理库内没有区别,本质上就是将fastcgi_params与fastcgi.conf相适应。

这行代码是告诉PHP应该执行哪个文件,没有这一项设置的话Nginx和PHP就不能一起工作。这行代码看起来能够很好的为Nginx指定Fastcgi的配置文件,Lgor Sysoev(Nginx开发者)也确实是这样设想的。然而,在配置时却不是简简单单的添加这行代码。

在0.6.x版本的时代, 也就是几年以前在我刚刚开始使用Nginx的时候,这一典型的变化在配置文件举例中看起来确实是这样:

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

由于维基人在社区中积极的倡导,开发者不再将root path的设置写死,而渐渐的开始使用 $document_root来设置root path ,然而,很多人许多年后仍然还在使用这样的配置。

由于数组指令的继承与交互,开发者沿用旧的配置方式不可能在fastcig_gram中包含这行代码。这样做意味着SCRIPT_FILENAME将被重复定义,并且都将被发送到后端而引起冲突。

在0.8.30版本(2009年12月15日发布),Lgor包含了和fastcgi_params一模一样的fastcgi.conf文件,但并没有改进SCRIPT_FILENAME fastcgi_param。这意味着社区可以推荐开发者采用包含fastcgi.conf
文件的方式来取代将SCRIPT_FILENAME添加到fastcgi.conf的方式,在维基上的文章绝大多数都是这样,我们在网络上的倡导也慢慢的使大多数受欢迎的文章推荐这样去设置。

当然,这个问题的背后是当时的包管理对Nginx许多版本的支持太少。通常来说0.6.x 与0.8x版本。许多人是不加载fastcgi.conf文件的。当他们最终选择升级他们的fastcgi.conf 并修改fastcgi_params时出现了一个情况,就是源码安装不同于库安装在不是非常重要的方式中。偶尔在IRC上还是会引起困惑。

我实际上更喜欢:
fastcgi_param SCRIPT_FILENAME $request_filename;

有人参考指令别名来配置fastcgi_new.conf吗?