fastcgi_params 與 fastcgi.conf的差異
fastcgi.conf
對比下fastcgi.conf與fastcgi_params文件,可以看出只有以下差異:
Java代碼
tctq4master@ddd:/etc/nginx$ diff fastcgi.conf fastcgi_params
2d1
< fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
25a25,26
>
> fastcgi_param SCRIPT_FILENAME $request_filename;
即fastcgi.conf只比fastcgi_params多了一行
Java代碼
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
============================================================================
Java代碼
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代碼
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裏包含進來。
fastcgi_params 與 fastcgi.conf的差異