tctq"/>

fastcgi_params 与 fastcgi.conf的差异

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fastcgi_params 与 fastcgi.conf的差异相关的知识,希望对你有一定的参考价值。

 

 

fastcgi.conf

对比下fastcgi.conffastcgi_params文件,可以看出只有以下差异:

 

Java代码  技术分享

  1. tctq4master@ddd:/etc/nginx$ diff fastcgi.conf  fastcgi_params   

  2. 2d1  

  3. < fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;  

  4. 25a25,26  

  5. >   

  6. > fastcgi_param  SCRIPT_FILENAME    $request_filename;  

 

fastcgi.conf只比fastcgi_params多了一行

Java代码  

  1. fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;  

 

 

原本只有fastcgi_params文件,fastcgi.confnginx 0.8.30 (released: 15th of December 2009)才引入的。主要为是解决以下问题(参考:http://www.dwz.cn/x3GIJ):

 

原本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 $document_root$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;

         }

 

原文网址:http://www.cnblogs.com/skynet/p/4146083.html

 

 

============================================================================

Java代码  技术分享

  1. fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;  

 

     这句话其实就是定义php中用到的服务器变量 ——$_SERVER

 

      http://wiki.nginx.org/NginxHttpFcgiModule 这个网址下有这么一句话:

      This module allows Nginx to interact with FastCGI processes and control what parameters are passed to the process。

        意思是 “服务器” 向你的处理php的cgi传递过去他需要的一些参数,而至少要有下面的两个参数php才能执行起来。

        以下是例子

        Below is an example of the minimally necessary parameters for PHP:

 

Java代码  技术分享

  1. fastcgi_param SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;  

  2.   

  3. fastcgi_param QUERY_STRING $query_string;  

 

       Parameter SCRIPT_FILENAME is used by PHP for determining the name of script. to execute, and QUERY_STRING contains the parameters of the request.

      所以 我们在没有定义SCRIPT_FILENAME这个系统变量的时候 php是没法解释执行的

      这个变量的定义可以写在nginx的配置文件nginx.conf里 也可以写在外部 用include的方式在nginx.conf里包含进来

 


以上是关于fastcgi_params 与 fastcgi.conf的差异的主要内容,如果未能解决你的问题,请参考以下文章

nginx中fastcgi_params配置参数

通过nginx的fastcgi_param来设置环境变量

nginx之详解fastcgi指令(修正)

配置nginx支持php

nginx的使用

nginx对PHP文件报File not found.错