對比下fastcgi.conf與fastcgi_params文件,能夠看出只有如下差別:php
tctq4master@ddd:/etc/nginx$ diff fastcgi.conf fastcgi_params html
2d1 nginx
< fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 後端
25a25,26 數組
> 服務器
> fastcgi_param SCRIPT_FILENAME $request_filename; app
即fastcgi.conf只比fastcgi_params多了一行ide
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
本來只有fastcgi_params文件,fastcgi.conf是nginx 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
============================================================================
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:
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
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裏包含進來。