Nginx运维之五 Nginx变量
- 常见变量
- 拼接变量
- $arg_NAME
- $cookie_NAME
- $http_NAME
- $sent_http_NAME
- $sent_trailer_NAME
常见变量
#request line的请求参数(例如,在请求/index.html?width=400&height=200 中, $args 表示字符串 width=400&height=200)
$args
#二进制的客户端地址,4字节的IPv4地址或16字节的IPv6地址
$binary_remote_addr
#发送到客户端的字节数,不计算响应头;此变量与 Apache模块mod_log_config的“%B”参数兼容
$body_bytes_sent
#发送给客户端的字节数
$bytes_sent
#连接序列号
$connection
#当前通过连接进行的请求数量
$connection_requests
#请求头的“Content-Length”
$content_length
#请求头的“Content-Type”
$content_type
#root or alias directive’s value for the current request
$document_root
#同 $uri
$document_uri
#顺序取值依次为 请求机器的host name 请求头的“Host”字段的host name 或者与请求匹配的服务器名
$host
# host name
$hostname
#如果连接以SSL模式运行为”on“,否则为空字符串
$https
#如果请求有参数则为“?”,否则为空字符串
$is_args
#setting this variable enables response rate limiting; see limit_rate
$limit_rate
#当前时间以毫秒分辨率为单位
$msec
#nginx version
$nginx_version
#PID of the worker process
$pid
#流请求为“p” ,否则“.”
$pipe
#获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串
#必须先通过在listen指令中设置proxy_protocol参数来启用PROXY协议。
$proxy_protocol_addr
#获取代理访问服务器的客户端端口,如果是直接访问,该值为空字符串
#必须先通过在listen指令中设置proxy_protocol参数来启用PROXY协议。
$proxy_protocol_port
# 同$args
$query_string
##当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径
$realpath_root
#client address
$remote_addr
#client port
$remote_port
#提供基本身份验证的用户名
$remote_user
#完整的请求地址
$request
#请求体,此变量可在location中使用,将请求主体通过proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass传递给下一级的代理服务器
$request_body
#将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要之一开启此功能,需要设置client_body_in_file_only。如果将次文件传递给后端的代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off,or scgi_pass_request_body off
$request_body_file
#请求完成则为“OK”,否则为空字符串
$request_completion
#当前连接请求的文件路径,由root或alias指令与URI请求生成
$request_filename
#生成的十六进制唯一16位随机请求标识符
$request_id
#请求长度(包括请求行、请求头和请求体)
$request_length
#请求方法通常是“GET” or “POST”
$request_method
#以毫秒分辨率为单位请求处理时间;从客户端读取第一字节以来所经过的时间
$request_time
#完整原始请求URI(带参数)
$request_uri
#请求协议头, “http” or “https”
$scheme
#接受请求的服务器的地址,计算此变量的值通常需要一次系统调用。 为了避免系统调用,listen指令必须指定地址并使用bind参数。
$server_addr
#接受请求的server名称
$server_name
#接受请求的server端口
$server_port
#请求协议,通常是“HTTP/1.0”, “HTTP/1.1”, or “HTTP/2.0”
$server_protocol
#响应码
$status
#有关客户端TCP连接的信息; 在支持TCP_INFO套接字选项的系统上可用
$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space
#ISO 8601标准格式的本地时间
$time_iso8601
#公共日志格式中的本地时间
$time_local
#请求中的当前URI(不带请求参数,参数位于$args),$uri的值可以在请求处理期间改变,例如。 当进行内部重定向时,或当使用索引文件时。
$uri
拼接变量
$arg_NAME
$arg_NAME
可以用来获取GET请求中NAME参数的值,可以把前缀$arg_
加上任意GET请求中NAME参数名称,该组合拼接变量的值即为GET请求中NAME参数的值。
如/index.html?param=nicai
,可以用$arg_param
取得 nicai
这个值.
$cookie_NAME
$cookie_NAME
可以匹配任意cookie中的变量,可以把前缀$cookie_
加上任意cookie变量的名称,该组合拼接变量的值即为cookie名称变量的值。
例如:
$cookie_id
$http_NAME
$http_NAME
可以用来获取任意请求头字段;可以把变量名中的后半部分NAME
可以替换成任意请求头字段,则可以获取当前请求头字段的取值,如在配置文件中需要获取http请求头:Accept-Language
,使用$http_accept_language
即可 。
案例:
# 获取cookie
$http_cookie
$http_post
#获取referer
$http_referer
#获取user_agent
$http_user_agent
#获取请求来源的IP地址
$http_x_forwarded_for
$sent_http_NAME
$sent_http_NAME
可以用来获取任意http响应头字段;变量名中的后半部分NAME可以替换成任意响应头字段,如需要获取响应头Content-length
,$sent_http_content_length
即可
案例如下:
$sent_http_cache_control
$sent_http_connection
$sent_http_content_type
$sent_http_keep_alive
$sent_http_last_modified
$sent_http_location
$sent_http_transfer_encoding
$sent_trailer_NAME
$sent_trailer_name
可以用来获取任意http响应字段;变量名中的后半部分NAME可以替换成任意响应字段
备注:
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
例:
GET /icwork/?search=product HTTP/1.1