您当前的位置:首页 > 计算机 > 服务器 > Nginx

nginx变量

时间:11-11来源:作者:点击数:
CDSY,CDSY.XYZ

变量

nginx的变量可以在配置文件中引用,作为功能判断或者日志等场景使用

变量可以分为内置变量和自定义变量

内置变量是由nginx模块自带,通过变量可以获取到众多的与客户端访问相关的值

常用内置变量:

官方文档:http://nginx.org/en/docs/varindex.html

变量 说明
$remote_addr 客户端ip
proxy_add_x_forwarded_for 包括客户端IP和中间经过的所有代理的IP,没有时则=$remote_addr
$args 存放url的参数,如:http://xx.com/a/index.do?id=2021&agent=1,变量内容位:id=2021&agent=1
$arg_name 请求行中的参数 name
$document_uri 除了url的参数以外的uri,如http://hj.com/a/index.do,变量内容为:/a/index.do
$document_root 网页家目录,针对当前请求的根路径设置值
$host 请求主机头字段,否则为服务器名称,如:blog.sakmon.com
$limit_rate 若有配置limit_rate,则速率以配置为标准,0表示不限速
$remote_port 客户端访问nginx时的随机端口
$remote_user 完成basic认证的用户名
$request 请求的方法、资源、协议,如:GET ?a=1&b=2 HTTP/1.1
$request_time 从接受用户请求的第一个字节到发送完响应数据的时间,完整请求时间
$request_body_file 客户端请求主体信息的临时文件名
$request_body 客户端请求体
$request_method 请求资源的方式,如:GET、PUT等
$request_filename 当前请求的资源的本地磁盘路径,如:root设置/2013/81.html
$request_uri 请求的原始uri,不包含主机名,相当于:document_uri+args两个变量,如:/2013/81.html?a=1&b=2
$request_completion 如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty),如:OK
$scheme 请求的协议,http、https、ftp、ssh等
$https https协议是否开启,开启则是:"on",无则是空字符串
$time_local 服务器本地时间
time_iso8601 采用 ISO 8601 标准格式的当地时间
$server_protocol 客户端请求资源使用的协议版本,通常是HTTP/1.0或HTTP/1.1,如:HTTP/1.1
$server_addr 访问的服务器的ip,在完成一次系统调用后可以确定这个值
$server_name 访问的服务器的FQDN
$server_port 访问的服务器的端口
$http_字段 字段是请求报文任意首部字段,可输出首部字段的内容
$cookie_键名 显示指定cookie,cookie以键值对存在
$status 响应码
$body_bytes_sent 发送的数据大小,不包括响应头,响应时送出的body字节数数量。即使连接中断,这个数据也是精确的,如:40
$bytes_sent 发送到客户端的字节数
$http_referer 转到此页面的之前的页面,如http://hj.com/aaa.html的referer来自http://hj.com/也就是跳转过来的原链接。可用于防盗链
$invaild_referer 记录不合法的referer,可用于防盗链
$upstream_cache_status nginx的代理缓存的信息,缓存主机是谁、缓存状态
$upstream_response_time 从建立连接到发送完最后一个内容字节的时间,这个是我们需要关注的,因为客户端的请求和客户所在网络有关
$upstream_connect_time 跟后端server建立连接的时间,如果是到后端使用了加密的协议,该时间将包括握手的时间
$upstream_header_time 接收后端server响应头的时间
$connection_time 连接时间,以秒为单位,精度为毫秒
$binary_remote_addr 客户端ip(二进制)
$content_length 等于请求行的“Content_Length”的值
$content_type 等于请求行的“Content_Type”的值
$hostname 如:centos53.localdomain
is_args 如果有args参数,这个变量等于”?”,否则等于”",空值,如?
query_string 与args相同 等于当中URL的参数(GET),如a=1&b=2
uri 这个变量指当前的请求URI,不包括任何参数(见args) 如:/2013/81.html
proxy_protocol_addr 若使用了 proxy_protocol 协议则返回协议中的地址,否则返回空
proxy_protocol_port 若使用了 proxy_protocol 协议则返回协议中的端口,否则返回空
proxy_protocol_server_addr PROXY 协议标头中的服务器地址
sent_http_字段 响应头字段
upstream_cache_status 记录缓存是否命中。Miss、Hit、Expire为字面意思,Stale为命中旧缓存,Revaliddated为验证旧缓冲为有效,updating为命中旧缓存但内容正在更新,bypass为从原始服务器响应

以下变量仅在开启http_geoip_module模块有效

变量 含义
$geoip_country_code 两个字母的国家/地区代码,例如“RU”,“US”
$geoip_country_code3 三个字母的国家/地区代码,例如“RUS”,“USA”
$geoip_country_name 国名,例如“俄罗斯联邦”,“美国”
$geoip_area_code 电话区号(仅限美国)
$geoip_city_continent_code 两个字母的大陆代码,例如“EU”,“NA”
$geoip_city_country_code 两个字母的国家/地区代码,例如“RU”,“US”
$geoip_city_country_code3 三个字母的国家/地区代码,例如“RUS”,“USA”
$geoip_city_country_name 国名,例如“俄罗斯联邦”,“美国”
$geoip_dma_code 根据Google AdWords
$geoip_latitude 纬度
$geoip_longitude 经度
$geoip_region 双符号国家区域代码(地区,领土,州,省,联邦土地等),例如“48”,“DC”
$geoip_region_name 国家地区名称(地区,领土,州,省,联邦土地等),例如“莫斯科市”,“哥伦比亚特区”
$geoip_city 城市名称,例如“莫斯科”,“华盛顿”
$geoip_postal_code 邮政编码
$geoip_org 组织名称,例如“墨尔本大学”
$http_字段使用:

注意: 首部字段中“-”要变成“_”,大小写不敏感

例:echo $http_user_agent;
location /echo {
	echo $http_cookie;		客户端cookie信息
}

自定义变量:

自定义变量名称和值,用于server、location、if

set指令设置
set $变量名 value;
例:
location /echo {
	set $test 123456;
	echo $test;
	set $my $host;
	echo $my:$remote_addr;
}
map指令设置

仅用于http段,支持正则处理

map 源变量 赋值变量 {
	[default 值;]
	...
}
例1:
map $host $xxx {
	default www.hj.com;
	hj		www.hj.com;
	~xxx	xxx;
}
 
原理:
  #从$host变量读取值,判断后传给$xxx,相当于 
  if $host = hj 
	$xxx=www.hj.com
  elif $host = xxx	#大小写不敏感
	$xxx=xxx	
  else
	$xxx=www.hj.com
例2: 允许多域名跨域请求
http {
	#单个变量的hash最大值
	map_hash_bucket_size 128;
	#整个map的hash表大小
	map_hash_max_size 2048;
 
	map $http_origin $corshost {
		default "";
		"~http://www.xx.com" http://www.xx.com;
		"~http://www.bb.com" http://www.bb.com;
	}
 
	server {
		add_header Access-Control-Allow-Origin $corshost;
		#开启请求头cookie,一旦开启,上面的必须指定明确的、与请求网页一致的域名,不能再设为'*'通配
		add_header Access-Control-Allow-Credentials true;
		add_header Access-Control-Allow-Methods 'PUT,POST,GET,DELETE,OPTIONS';
		add_header Access-Control-Allow-Headers 'Content-Type,Content-Length,Authorization,Accept,X-Requested-With';
		
		location / {
			if ($request_method = 'OPTIONS') {
   				 return 200;
			}
		}
	}
}
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐