fastcgi_params 與 fastcgi.conf的差別

 

 

fastcgi.conf

對比下fastcgi.conffastcgi_params文件,能夠看出只有如下差別:php

 

Java代碼  收藏代碼css

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

  2. 2d1  nginx

  3. < fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;  後端

  4. 25a25,26  數組

  5. >   服務器

  6. > fastcgi_param  SCRIPT_FILENAME    $request_filename;  app

 

fastcgi.conf只比fastcgi_params多了一行ide

Java代碼  ui

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

相關文章
相關標籤/搜索