nginx配置文件中预定义全局变量的解说

阅读更多
-- nginx内置全局变量。

nginx内置了一些全局变量,本文挑选了几个最重要的进行描述。

$request
类似 GET /2.php?a=4 HTTP/1.1
包含了请求方法,url,协议。

$document_root
当前请求在 root 指令中指定的值,或alias指令的配置值

$args = $query_string
含义:查询字符串
样例参考值: a=b&c=d&e=f
说明: 相当于PHP中的服务器参数: $_SERVER[“QUERY_STRING”]
请求行中的参数字符串,$args是nginx的写法。

$is_args
含义:如果$args有值,则为?,否则为空字符串
所以,事实上这个变量大多是为了拼接url使用的。很有用的变量。

$request_uri
完整的原始请求行(带参数)。
包含请求参数的原始 URI, 不包含主机名, 如: ”/foo/bar.php?arg=baz”.

$uri = $document_uri
当前请求规范化以后的URI。
路径匹配在URI规范化以后进行。所谓规范化,就是先将URI中形如“%XX”的编码字符进行解码,
再解析URI中的相对路径“.”和“..”部分, 另外还可能会压缩相邻的两个或多个斜线成为一个斜线。
变量$uri的值可能随请求的处理过程而改变。 比如,当进行内部跳转时
例如:不带请求参数的当前 URI, $uri 不包含主机名, 如 "/foo/bar.html".

$request_filename
当前请求的文件路径, 由 root 或 alias 指令与 URI 请求生成.
含义:当前执行脚本的绝对路径,
例如:/var/www/project/1.php
但是,本文最后的例子表明, 这不一定是个标准文件名
fastcgi会做进一步处理,生成script_filename

==================================================
$script_filename
这是fastcgi的参数,而不是nginx的变量。
含义:当前执行脚本的绝对路径,
例如:/var/www/project/1.php
相当于PHP中的服务器参数: $_SERVER[“SCRIPT_FILENAME”]

$path_info
这是fastcgi的参数,而不是nginx的变量。
含义:请求中真实脚本名称之后,查询语句(query string)之前的路径信息
例如当前 URL 为 http://www.example.com/php/user.php/some/stuff?foo=bar,
那么 PATH_INFO 将包含 /some/stuff。
说明: 相当于PHP中的服务器参数: $_REQUEST[“PATH_INFO”]

根据观察,path_info和script_filename 其实是fastcgi的参数,且fastcgi的参数会全部传递给php的$_SERVER变量。
但是fastcgi的参数,有些需要在nginx的配置文件中设置,才有值。

在nginx的配置目录下有个名为 fastcgi_params 的文件,里面内容如下:
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;


其实,fastcgi的所有参数都会在php的$_SERVER中有,当然有键不代表有值。
但键确实都有,
上面这个名为 fastcgi_params 的文件,最右边一列就是nginx 的内置全局变量 的一部分。
nginx 传给 fastcgi,fastcgi 传给 php 的 $_SERVER 变量。

==========================================================
实例:目录如下
/var/www/myapp_code1,这是root,
/var/www/myapp_code1/index.php
/var/www/myapp_code1/path/2.php
总共就两个文件,看看实例:
http://www.d1.com/path/2.php/aa/bb?a=4

(1)document_root=[/var/www/myapp_code1] 
(2)request_uri=[/path/2.php/aa/bb?a=4]                   
(3)uri=[/path/2.php/aa/bb] 
(4)request_filename=[/var/www/myapp_code1/path/2.php/aa/bb] 
(5)args=[a=4]

而php的 $_SERVER 变量
'SCRIPT_FILENAME' => '/var/www/myapp_code1/path/2.php',
'REQUEST_URI' => '/path/2.php/aa/bb?a=4',
'DOCUMENT_ROOT' => '/var/www/myapp_code1',
'DOCUMENT_URI' => '/path/2.php/aa/bb',
'QUERY_STRING' => 'a=4',


你可能感兴趣的:(nginx,配置,变量,预定义)