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裏包含進來

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章