对比下fastcgi.conf与fastcgi_params文件,可以看出只有以下差异:即fastcgi.conf只比fastcgi_params多了一行
astcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
原本只有fastcgi_params文件,fastcgi.conf是nginx 0.8.30 才引入的。主要为是解决以下问题:
原本Nginx只有fastcgi_params,后来发现很多人在定义SCRIPT_FILENAME时使用了硬编码的方式。
例如,fastcgi_param SCRIPT_FILENAME /var/www/foo$fastcgi_script_name。
于是为了规范用法便引入了fastcgi.conf。
不过这样的话就产生一个疑问:
为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?
这是因为fastcgi_param指令是数组型的,和普通指令相同的是:内层替换外层;
和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。
换句话说,如果在同级定义两次SCRIPT_FILENAME,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件。
因此不再建议大家使用以下方式(搜了一下,网上大量的文章,并且nginx.conf的默认配置也是使用以下方式):
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
而使用最新的方式:
include fastcgi.conf;
php有以下两种方式,选用第二种
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi.conf; }