nginx部分常用内置变量

变量名 说明 备注
$host 请求中的主机头(Host)字段 如果请求中的主机头不可用或为空,则为处理请求的server名称(处理请求的server的server_name指令的值)。值为小写,不包含端口。
$server_name 服务器名称 nginx conf文件Server模块中定义的值
$server_port 服务器端的端口号 eg: 80、8080、443
$remote_port 客户端的端口
$remote_addr 客户端的IP地址
$$binary_remote_addr 二进制码形式的客户端地址
$document_root 当前请求在root指令中指定的值
$scheme 协议 eg: http、https
$cookie_COOKIE cookie中COOKIE的值 eg: $cookie_iploc
$http_HEADER 匹配任意请求头字段 “HEADER”可以替换成任意请求头字段,如在配置文件中需要获取http请求头:“Accept-Language”,那么将“-”替换为下划线,大写字母替换为小写,形如:$http_accept_language即可。
$sent_http_HEADER HTTP响应头中的内容,HEADER为HTTP响应中的内容转为小写,-变为_(破折号变为下划线) eg: $sent_http_cache_control、$sent_http_content_type
$request_uri 请求参数的原始URI 无法修改,请查看$uri更改或重写URI
$uri 请求中的当前URI(不带请求参数,参数位于$args) 不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html
$document_uri 与$uri相同
$args GET请求中的参数 eg: foo=123&bar=abc;
$arg_name 请求中参数name的值
$query_string 与$args相同
$arg_PARAMETER GET请求中变量名PARAMETER参数的值
$http_referer 引导用户代理到当前页的前一页的地址信息
$http_x_forwarded-for 表示 HTTP 请求端真实 IP X-Forwarded-For格式:X-Forwarded-For: client, proxy1, proxy2XFF的内容由「英文逗号+空格」隔开的多个部分组成,第一个IP是离服务端最远的设备IP,然后是每一级代理的IP
$request_body post body 数据 Nginx 读取请求体是按需的,如果使用 ngx_proxy 模块的话,读取发生在 content 请求处理阶段。所以如果在早于 content 阶段之前的阶段(比如 rewrite 阶段)去读取 $request_body,则必是空值。只有在location中用到proxy_pass, fastcgi_pass, uwsgi_pass或者scgi_pass指令时,request body才会被读取到内存缓冲区中,$request_body变量才有值。
  • 通常情况下:$request_uri=$document_uri($uri)+$query_string($args)
  • $uri和$document_uri表示的是解码以后的请求路径,不带参数
  • $request_uri表示的是完整的URI(没有解码),在return、rewrite、add_header、p roxy_set_header、proxy_pass之后使用$request_uri,避免CRLF漏洞。
  • eg: http://localhost:8080/test1/test2/index.php?a=1&b=2&c=3
    1
    2
    3
    4
    5
    6
    7
    8
    >$server_port:8080
    >$request_uri:/test1/test2/index.php?a=1&b=2&c=3
    >$document_uri:/test1/test2/index.php
    >$query_string: a=1&b=2&c=3
    >$uri: /test1/test2/index.php
    >$args: a=1&b=2&c=3
    >$document_root:/usr/local/nginx/html
    >$request_filename:/usr/local/nginx/html/test1/test2/index.php