Nginx $ document_root $ fastcgi_script_name vs $ request_filename

如果在我设置的configuration文件中,我不能注意到任何区别

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

要么:

  fastcgi_param SCRIPT_FILENAME $request_filename; 

他们分别做什么? 其中一个比另一个好吗?

提前致谢。

以下是文档所说的内容:

$ REQUEST_FILENAME

这个variables等于当前请求的文件path,由指令root或别名和URI请求组成;

$ DOCUMENT_ROOT

这个variables等于当前请求的指令根的值;

$ fastcgi_script_name

这个variables等于URI请求,或者如果URI以正斜杠结束,则URI请求加上由fastcgi_index给出的索引文件的名称。 可以使用这个variables代替SCRIPT_FILENAME和PATH_TRANSLATED,特别是用于确定PHP脚本的名字。

正如这里所写,使用fastcgi_indexfastcgi_split_path_info时至less有一点区别。 也许还有更多……这就是我现在所知道的。

您收到请求“/ info /”并具有以下configuration:

 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name; 

SCRIPT_FILENAME将等于“/home/www/scripts/php/info/index.php”,但是使用$ request_filename就是“/ home / www / scripts / php / info /”。

使用时也很重要。 请参阅此处寻求进一步的帮助: http : //nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info

我想这些行是从'fastcgi_params'文件中获取的。

基本上,当涉及到SCRIPT_FILENAME时,您没有收到任何错误,因为在您的虚拟主机文件中定义了根指令时,它已经被定义。 所以,除非你使用fastcgi_param在你的虚拟主机文件中明确地定义它,否则SCRIPT_FILENAME的值将取自根指令。但是一个重要的要点在这里。 还有另一个variables,nginx需要将请求发送到php服务器$fastcgi_script_name并且你必须定义它以避免重复的URL和uri以斜线结尾的错误。

结论

为了使所有的工作都非常好,每个人都应该在/ etc / nginx文件夹中的'fastcgi_params'文件中明确定义SCRIPT_FILENAME或者通过在php位置块中包含以下行来轻松地在站点的可用文件夹中定位你的站点的虚拟主机:

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

或者像上面写的那样包含在'fastcgi_params'文件中,两种方法都是一样的。有关将ngnix连接到PHP-FPM的更多信息,请转到:

https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/

我希望这将有助于任何人在未来,因为它花了我很多时间来弄清楚..