Nginx核心模块内置变量

本文根据Nginx官网整理了Nginx的ngx_http_core_module模块的内置变量,可与Apache做对比参考。随后做了一次测试观察各变量的值,并附上测试结果。

1.变量列表

$arg_name    请求行中参数name的值。

$args    请求行中的所有参数。

$binary_remote_addr    客户端地址的二进制形式。

$body_bytes_sent    发送给客户端的字节数,不包含响应头的内容,与Apache的mod_log_config模块中的%B兼容。

$bytes_sent    发送给客户端的字节数(1.3.8, 1.2.5)。

$connection    连接序列号(1.3.8,1.2.5)(有人说是TCP连接的序列号,但在1.6.2上抓包观察却不是)。

$connection_requests    当前连接的请求数(1.3.8,1.2.5)。

$content_length    请求头中的Content-Length值。

$content_type    请求头中的Content-Type值。

$cookie_name    名为name的cookie值。

$document_root    当前请求的根目录或别名。

$document_uri    同$uri

$host    按如下顺序取值:请求的主机名,请求头的Host值,匹配的服务器名。

$hostname    服务器主机名。

$http_name    该变量的最后一部分是请求头中的字段名称转换为小写,破折号由下划线替换而来。比如使用$http_content_encoding获取Content-Encoding的值。

$https    如果使用SSL模式连接,则值为on,否则为空字符串。

$is_args    如果请求行中带有参数,则值为?,否则为空字符串。

$limit_rate    设置的响应速度。

$msec    精确到毫秒的当前时间(1.3.9, 1.2.6)。

$nginx_version    nginx版本。

$pid    进程PID。

$pipe    如果请求来自管道,则值为p,否则为.。

$proxy_protocol_addr    来自代理协议头的客户端地址,否则为空字符串(1.5.12)。必须先通过在listen指令中设置proxy_protocol参数来启用代理协议。

$proxy_protocol_port    代理服务器端口(1.11.0)。同样需要使用proxy_protocol启用代理。

$query_string    同$args

$realpath_root    当前请求的根目录或别名的绝对路径,所有符号链接将解析为实际路径。

$remote_addr    客户端地址。

$remote_port    客户端端口。

$remote_user    基本身份认证使用的用户名。

$request    完整的请求行。

$request_body    请求体。当请求体被读取到内存缓冲区时,变量的值在proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass指令处理的位置可用。

$request_body_file    请求体的临时文件的名称。在处理结束时,需要删除该文件。若要始终将请求主体写入文件,需要启用client_body_in_file_only。当在代理请求或对FastCGI / uwsgi / SCGI服务器的请求中传递临时文件的名称时,应分别通过proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off或scgi_pass_request_body off指令禁用传递请求体。

$request_completion    一次请求结束时值为OK,否则为空字符串。

$request_filename    当前请求的文件路径,由根路径或别名和请求URI组成。

$request_id    16个随机字节生成的唯一请求标识符,用十六进制表示(1.11.0)。

$request_length    请求长度(包括请求行,请求头和请求体)(1.3.12,1.2.7)。

$request_method    请求方法,通常是GET或POST。

$request_time    发出请求时的时间戳。官方说是处理请求所花费的时间(1.3.9,1.2.6)。

$request_uri    完整的原始请求URI(包含参数)。

$scheme    请求协议,http或https。

$sent_http_name    显示自定义的响应头字段,变量名称的最后一部分是字段名称转换为小写,短划线由下划线替换。用法与$http_name类似。

$sent_trailer_name    在响应结束时发送的任意字段(1.13.2),变量名称的最后一部分是字段名称转换为小写,破折号由下划线替换。

$server_addr    接受请求的服务器的地址。计算此变量的值通常需要一次系统调用。为避免系统调用,listen指令必须指定地址并使用bind参数。

$server_name    服务器名。

$server_port    服务器端口。

$server_protocol    请求协议,通常是HTTP/1.0、HTTP/1.1或HTTP/2.0。

$status    响应状态(1.3.2,1.2.2)。

$tcpinfo_rtt$tcpinfo_rttvar$tcpinfo_snd_cwnd$tcpinfo_rcv_space    有关客户端TCP连接的信息,在支持TCP_INFO套接字选项的系统上可用。

$time_iso8601    ISO 8601标准格式的本地时间(1.3.12,1.2.7)。

$time_local    通用日志格式的本地时间(1.3.12,1.2.7)。

$uri    当前请求的URI。$uri的值可能在请求处理期间发生变化,例如在进行内部重定向或使用索引文件时。

2.测试

大致过程如下:

准备好nginx和php环境,使用fastcgi_param将nginx变量传递给php,在php中设置好cookie,最后通过前端页面将结果输出。

本次测试将test.com域名与服务器IP绑定,使用Postman发送GET请求,访问地址是http://test.com:89/var.php?name=Tom&age=20,并添加一个Header字段Name:Bob。

测试结果如下:

Variable Value
$arg_name Tom
$args name=Tom&age=20
$binary_remote_addr \xC0\xA8e8
$body_bytes_sent 0
$bytes_sent 0
$connection 527
$connection_requests 1
$content_length  
$content_type  
$cookie_name Tommy
$document_root /var/www
$document_uri /var.php
$host test.com
$hostname debian8
$http_name Bob
$https  
$is_args ?
$limit_rate 0
$msec 1532076179.430
$nginx_version 1.6.2
$pid 32229
$pipe .
$proxy_protocol_addr  
$proxy_protocol_port  
$query_string name=Tom&age=20
$realpath_root /var/www
$remote_addr 192.168.101.56
$remote_port 11164
$remote_user  
$request GET /var.php?name=Tom&age=20 HTTP/1.1
$request_body  
$request_body_file  
$request_completion  
$request_filename /var/www/var.php
$request_id  
$request_length 281
$request_method GET
$request_time 1532076179
$request_uri /var.php?name=Tom&age=20
$scheme http
$sent_http_name  
$sent_trailer_name  
$server_addr 192.168.100.64
$server_name test.com
$server_port 89
$server_protocol HTTP/1.1
$status 000
$tcpinfo_rtt 4000
$tcpinfo_rttvar 2000
$tcpinfo_snd_cwnd 10
$tcpinfo_rcv_space 29200
$time_iso8601 2018-07-20T16:42:59+08:00
$time_local 20/Jul/2018:16:42:59 +0800
$uri /var.php

上述测试只是直接访问Web服务器的结果,没有使用代理,nginx也没有做额外的设置,仅供参考。

注:

1. 前端$status的值是000,后端输出的是200;

2. 1.6.2版本中的$proxy_protocol_port、$request_id和$sent_trailer_name三个变量不能使用。

--------------------------------------------------

参考资料:

1. nginx官网

2. 《nginx内置变量》。

原文地址:https://www.cnblogs.com/liuguanglin/p/9341400.html

时间: 2024-11-08 15:33:25

Nginx核心模块内置变量的相关文章

使用正则表达式来截取nginx中的内置变量

nginx 中的内置变量都可以通过 if 指令 + 正则表达式来进行截取,截取之后的结果通过正则表达式的分组来进行引用 比如:从请求中传过来的一个名为 ssl_client_s_dn 的变量,它的值是类似 cn=username这样的 我们想要只留下username ,可以这样: if ( $ssl_client_s_dn ~ (CN=([\S\s]*)) ){                 set  $username $2;  } 其中 $2 是指获取正则表达式匹配结果的第二个分组(也就是

nginx的那些内置变量

nginx在配置文件nginx.conf中可以使用很多内置变量,配置如下: location /info { add_header 'Content-Type' 'text/html'; echo "http_user_agent :$http_user_agent <br>"; echo "http_cookie :$http_cookie <br>"; echo "http_user_agent :$http_user_agen

python模块内置变量及其作用

1.__file__ 所在模块:os 变量作用:指向当前文件 当前文件的完整路径:os.path.abspath(__file__) 当前文件所属目录:os.path.dirname(os.path.abspath(__file__)) 当前文件所属目录的上级目录:os.path.dirname(os.path.dirname(os.path.abspath(__file__))) cat filelocation.py import os print(__file__) print(os.pa

Nginx内置变量以及日志格式变量参数详解

Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为空字符串 $uri #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html". $d

nginx内置变量

今天在整理nginx的rewrite规则,发现遇到许多关于nginx内置变量的判断,所以此处将nginx的内置变量温习一遍······ nginx支持的所有内置变量: $arg_name 请求中的的参数名,即"?"后面的arg_name=arg_value形式的arg_name $args 请求中的参数值 $binary_remote_addr 客户端地址的二进制形式, 固定长度为4个字节 $body_bytes_sent 传输给客户端的字节数,响应头不计算在内:这个变量和Apache

nginx内置变量 大全

nginx内置变量 内置变量存放在  ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的.总而言之,这些变量代表着客户端请求头的内容,例如$http_user_agent, $http_cookie, 等等.下面是nginx支持的所有内置变量: $arg_name请求中的的参数名,即"?"后面的arg_name=arg_value形式的arg_name $args请求中的参数值 $binary_remote_addr客户端地址的二进制形式

nginx基础学习第二篇:nginx内置变量的使用

ngx_http_core模块提供的内置变量有很多,常见的有 $uri,用来获取当前请求的uri,不含请求参数. $request_uri,用来获取请求最原始的uri,包含请求参数,且未解码. $request,获取请求方法(GET或者POST).$request_uri.HTTP协议版本. $args,获取当前请求的参数串(即请求中问号后面的部分,如果有的话),未解码的原始值.$args变量是可以改变的,利用set指令即可 set $args a=1&b=2.需要注意的是,绝大部分的内置变量都

自定义nginx访问日志和内置变量使用

自定义nginx访问日志和内置变量使用 安装第三方echo模块后查看内置变量 内置变量 1.$args 用户在浏览器中查找的相关参数(uri中?之后的字段)2.$document_root 站点根目录所在的位置3.$document_uri 去除url中域名部分后所剩下的目录4.$host 所访问的主机5.$http_user_agent 客户端所使用的浏览器6.$http_cookie 客户端的cookie信息7.$limit_rate 客户端的下载速率0表示不限制速度 server { se

nginx 内置变量

内置变量 server { listen 80; server_name cpu.enjoy.com; if ( $http_origin ~ http://(.*).enjoy.com){ set $allow_url $http_origin; } #1 location /var { echo $allow_url; echo '[host]=$host' ; echo '[http_HEADER]=$http_HEADER' ; echo '[remote_addr]=$remote_a