AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 465607
Accepted
MultiformeIngegno
MultiformeIngegno
Asked: 2013-01-10 16:34:09 +0800 CST2013-01-10 16:34:09 +0800 CST 2013-01-10 16:34:09 +0800 CST

Nginx $document_root$fastcgi_script_name 与 $request_filename

  • 772

如果在我的配置文件中设置,我看不出有什么不同

 fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

或者:

 fastcgi_param  SCRIPT_FILENAME    $request_filename;

他们分别做什么?两者中的一个比另一个更好吗?

提前致谢。

nginx
  • 3 3 个回答
  • 61188 Views

3 个回答

  • Voted
  1. Best Answer
    SimonSimCity
    2013-04-05T01:32:33+08:002013-04-05T01:32:33+08:00

    这是文档所说的:

    $request_filename

    此变量等于当前请求的文件路径,由指令根或别名和 URI 请求组成;

    $document_root

    该变量等于当前请求的指令 root 的值;

    $fastcgi_script_name

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

    如此处所写,使用fastcgi_index或fastcgi_split_path_info时至少存在差异。也许还有更多……这就是我现在所知道的。

    例子

    您收到请求/info/并具有以下配置:

    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/.

    的配置也fastcgi_split_path_info很重要。请参阅此处以获得更多帮助: http: //nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info

    • 31
  2. Steely Wing
    2018-07-19T19:08:31+08:002018-07-19T19:08:31+08:00

    TLDR

    我推荐$request_filename用于SCRIPT_FILENAME.


    如果你使用root指令

    $document_root$fastcgi_script_name等于$request_filename。

    如果你使用alias指令

    $document_root$fastcgi_script_name将返回错误的路径,因为$fastcgi_script_name是 URL 的路径,而不是与 相关的路径$document_root。

    例子

    如果你有配置

    location /api/ {
        index  index.php index.html index.htm;
        alias /app/www/;
        location ~* "\.php$" {
            try_files      $uri =404;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            # fastcgi_param  SCRIPT_FILENAME  $request_filename;
        }
    }
    

    要求/api/testing.php:

    • $document_root$fastcgi_script_name==/app/www//api/testing.php
    • $request_filename==/app/www/testing.php

    要求/api/:

    • $document_root$fastcgi_script_name==/app/www//api/index.php
    • $request_filename==/app/www/index.php

    如果你使用,你应该使用指令$request_filename设置索引,这是行不通的。indexfastcgi_index

    • 16
  3. Dr.SMS
    2013-12-23T02:34:13+08:002013-12-23T02:34:13+08:00

    我猜这些行取自“fastcgi_params”文件。

    基本上你不会收到任何错误, SCRIPT_FILENAME因为当你在你的 vhost 文件中定义你的 root 指令时它已经被定义了。fastcgi_param因此,除非您使用的值在您的 vhost 文件中明确定义它,否则SCRIPT_FILENAME将从 root 指令中获取。但是这里有一点很重要。为了将请求发送到 php 服务器,nginx 需要另一个变量,$fastcgi_script_name您必须很好地定义它,以避免重复的 URL 和以斜线结尾的 uri 错误。

    结论:

    为了让一切都运行得非常好,每个人都应该SCRIPT_FILENAME在位于 /etc/nginx 文件夹中的“fastcgi_params”文件中明确定义,或者通过在 php 位置块中包含以下行,轻松地在位于 sites-available 文件夹中的站点虚拟主机中明确定义:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    

    或包含在您上面写的“fastcgi_params”文件中,无论哪种方式都是一样的。有关将 ngnix 连接到 PHP-FPM 的更多信息,请访问:

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

    我希望它能对未来的任何人有所帮助,因为我花了很多时间才弄明白……

    • 3

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve