二、nginx 变量说明 和第三方模块使用。
nginx 变量使用
nginx的变量可以在配置文件中引用,作为功能判断或者日志等场景使用,变量可以分为内置变量和自定义变量,
内置变量是由nginx模块自带,通过变量可以获取到众多的与客户端访问相关的值
常见内置变量 (echo是第三方模块,参考ngin编译安装)
常见内置变量
echo $remote_addr; #存放了客户端的地址,注意是客户端的公网IP
echo $args; #变量中存放了URL中的指令,http://www.magedu.net/main/index.do?id=090&partner=search以上:id=090&partner=search 即为 $args
echo $cookie_name; #表示key为 name 的cookie值
echo $document_root; #保存了针对当前资源的请求的系统根目录,如/apps/nginx/html
echo $document_uri; #保存了当前请求中不包含指令的URI,注意是不包含请求的指令,如http://www.magedu.net/main/index.do?id=090&partner=search会被定义为/main/index.do
echo $request_filename; #当前请求的资源文件的路径名称,由root或alias指令与URI请求生成的文件绝对路径,如/apps/nginx/html/main/index.html,(包含:$document_root;$document_uri;)
echo $host; #存放了请求的host名称(域名),
echo $http_user_agent; #记录了客户端的软件信息,比如,浏览器的名称和版本号。
echo $http_cookie; #客户端的cookie信息(测试curl -b user=zzhz 1.1.1.1/echo)
echo $limit_rate; #如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0
echo $remote_port; #客户端请求Nginx服务器时客户端随机打开的端口
echo $remote_user; #当nginx开启了用户认证(Auth Basic Module)功能后,此变量记录了客户端使用了哪个用户进行了认证
echo $request_body_file; #做反向代理时发给后端服务器的本地资源的名称
echo $request_method; #请求资源的方式,GET/PUT/DELETE等(测试 curl -X PUT 1.1.1.1/echo)
echo $request_uri; #包含请求参数的原始URI,不包含主机名如:main/index.do?id=090&partner=search。
echo $server_protocol; #请求资源的协议版本,如HTTP/.0,HTTP/.,HTTP/.0等
echo $request; #记录了当前http请求的方法、url和http协议版本。(包含:$request_method;$request_uri;$server_protocol;)
echo $scheme; #请求的协议,如ftp,https,http等
echo $server_addr; #保存了服务器的IP地址
echo $server_name; #请求的服务器的主机名
echo $server_port; #请求的服务器的端口
echo $request_time; #请求的响应时间(包括后端服务器的响应时request_time=ningx+upstream_response_time)
echo $upstream_response_time; #后端服务器的响应时间
echo $http_x_real_ip #用在后端服务器中,此参数显示客户端的IP地址,但在前端日志显示为空。
echo $http_x_forwarded_for; #用在后端服务器中,获得用户的真实ip,IP穿透可以。(如果前端和后端的日志同时设置此参数,前端日志不显示此信息,后端日志不会记录前端的IP,而是记录客户端的IP。与"$http_x_real_ip"相似。
echo $body_bytes_sent; #记录了nginx响应客户端请求时,发送到客户端的字节数,不包含响应头的大小。
echo $http_referer; #记录了当前请求是从哪个页面过来的,比如你点了A页面中的超链接才产生了这个请求,那么此变量中就记录了A页面的url。盗链等。
echo $status; #记录了当前http请求的响应状态,即响应的状态码,比如200、404等响应码,都记录在此变量中。
echo $time_local; #记录了当前日志条目的时间。
echo $proxy_add_x_forwarded_for;#客户端IP透传(反向代理),记录多个的IP地址,配合proxy_set_header使用。(包括$http_x_forwarded_for;)
echo $proxy_host #记录了后端的服务器地址。
nginx 自定义变量:
自定义变量名称和值,使用指令set $variable value
格式如下:set $variable value;
支持:server, location, if
示例:
set $name magedu; echo $name; set $my_port $server_port; echo $my_port; echo "$server_name:$server_port";
例子:
location /test { #test目录可以不用创建
default_type text/html;
echo "hello world,main-->";
echo_reset_timer;
set $name zzhz;
echo $name;
echo_location /sub1;
echo_location /sub2;
echo "took $echo_timer_elapsed sec for total.";
}
location /sub1 {
echo_sleep 1; #echo 自身的模块。
echo sub1;
}
location /sub2 {
echo_sleep 1;
echo sub2;
}