对比下 fastcgi.conf 与 fastcgi_params 文件,可以看出只有以下差异,即 fastcgi.conf 只比 fastcgi_params 多了一行:

fastcgi_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;
}

 


原文地址:https://blog.csdn.net/qq_42303254/article/details/89503656

参考阅读:https://blog.martinfjordvald.com/nginx-config-history-fastcgi_params-versus-fastcgi-conf/