Ngx_http_core_module模块支持内置变量,他们的名字和apache的内置变量是一致的,人性化吧,了解这些变量,将使我们配置起来非常方便,
例如:负载均衡中的header头转发 让后端服务器可以获取到客户端请求的真实ip
首先我们来先看一个最基本的请求header 这是我去请求www.baidu.com 请求header如下:
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate, br
Accept-Language zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Connection keep-alive
Host www.baidu.com
Referer https://www.baidu.com/s?wd=aaa&rsv_spt=1&rsv_iqid=0x80378a480003084f&issp=1&f=8&rsv_bp=0&rsv_idx=2&
ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=4&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&inputT=1804&rsv_sug4=1805
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0
为什么要贴这个呢?因为我接下来介绍的nginx内置变量中就有和它们相关的 边看边核对 理解起来更容易不是?
常用内置变量列表如下
$args
此变量与请求行中的参数相等 注意我请求中的 referer 此变量表示我请求的所有参数
$content_length
等于请求行的“Content_Length”的值。
$content_type
等同与请求头部的”Content_Type”的值
$document_root
等同于当前请求的root指令指定的值
$document_uri
讲解这个变量之前需要讲解下nginx规范化
所谓规范化,就是先将URI中形如“%XX”的编码字符进行解码,再解析URI中的相对路径“.”和“..”部分, 另外还可能会压缩相邻的两个或多个斜线成为一个斜线,
这也就是如www.xxx.com///index.html 这样的访问也能访问的原因
规范前的url为 www.xxx.com///index.html 保存在$request_uri中
而规范后的url为 www.xxx.com/index.html 保存在$uri中 nginx会压缩相邻的两个或多个斜线成为一个斜线
$host
与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样 上述例子中没有体现
$limit_rate
允许限制的连接速率 一般不常用
$request_method
等同于request的method,通常是“GET”或“POST”
$remote_addr
客户端ip 这个再做负载均衡的时候 如果要获取到客户端的请求ip需要这个
$remote_port
客户端port
$remote_user
等同于用户名,由ngx_http_auth_basic_module认证
$request_filename
当前请求的文件的路径名,由root或alias和URI request组合而成
请求body内的文件
$request_uri
含有参数的完整的初始URI 如上例子就是
https://www.baidu.com/s?wd=aaa&rsv_spt=1&rsv_iqid=0x80378a480003084f&issp=1&f=8&rsv_bp=0&rsv_idx=2&
ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=4&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&inputT=1804&rsv_sug4=1805
$query_string
与$args一样 请求中的参数
$sheeme
http模式(http,https)
$server_protocol
等同于request的协议,使用“HTTP/或“HTTP/
$server_addr request
到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。
$server_name
请求到达的服务器名
$server_port
请求到达的服务器的端口号
$uri
等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index