开发者学堂课程【Nginx 企业级 Web 服务实战:AIO、第三方模块及自定义变量】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/649/detail/10759
AIO、第三方模块及自定义变量(三)
四、内置变量
日志记录
取值判断
例如可以设置这样一个按判断
if 协议 不是 https:
转到 https
else
响应
Fi
变量使用:
1)$remote_addr;
#存放了客户端的地址,注意是客户端的公网 IP,也就是一家人访问一个网站,则会显示为路由器的公网 IP。
演示:输入vim /apps/nginx/conf/conf.d/linux39-pc.conf
进入后注释掉#
echo hello world
再输入echo $remote_addr;
之后再 reload,输入 /apps/nginx/sbin/nginx -s reload
再来访问网址 magedu.net
页面显示172.20.0.100
显示的地址就是访问的地址,用户的源地址。那么在配置 nginx 的日志文件时可以调用
输入vim/apps/nginx/conf/nginx.conf
观察到配置中存在 $remote addr,已经记下了用户的源地址
2)$args;
#变量中存放了URL中的指令,例如http://www.magedu. net/main/index.do?id=20190221&partner=search中的
id=20190221&partner=search
演示:输入vim /apps/nginx/conf/conf.d/linux39-pc.conf
注释掉echo $remote_addr
再输入echo $args;
再输入 /apps/nginx/sbin/nginx -s reload
再访问网址
如图页面显示
自动将?后的参数输出,如果将后面换一个值123456,结果就会变成
Keyword=iphone11&enc=utf-8&wq=iphone11&pvid=123456
3)$document_root;
#保存了针对当前资源的请求的系统根目录,如 /apps/nginx/ html。
演示:在配置中注释掉 echo $args
再输入echo $document_root;
保存后 reload
再来访问网址 magedu.net/index.html
页面显示 /data/nginx/html/pc
4)$document_uri;
#保存了当前请求中不包含指令的 URI,注意是不包含请求的指令,比如
http://www.magedu.net/main/index.do?id=20190221&partner=search会被定义为/main/index.do
演示:在配置中注释掉echo $document_root;
再输入echo $document_uri;
reload 后再访问刚才的网址
magedu.net/Search?keyword=iphone11&enc=utf-8&wq=iphone11&pvid=123456
页面显示 /Search
如果修改 Search为linux38
则显示 /linux
5)$host
#存放了请求的 host 名称
演示:注释掉 echo $document_uri;
再输入echo $host
保存后 reload
再访问网址
magedu.net/linux?keyword=iphone11&enc=utf-8&wq=iphone11&pvid=123456
页面显示就为 www.magedu.net,就是请求的服务器域名
6)$http_user_agent
#客户端浏览器的详细信息
演示:注释掉 echo $host
再输入echo $http_usr_agent;
保存后 reload
再访问网址,该浏览器为谷歌
页面显示为
Mozila/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/78.0.3904.97 Safari/537.36
如果换成火狐浏览器,则页面显示
Mozila/5.0(X11;Ubuntu;Linux x86_64;rv:71.0)Gecko/20100101 Firefox/71.0
7)$http_cookie;
客户端的 cookie 信息。
8)limit_rate 10240;
echo $limit_rate;
#如果 nginx 服务器使用 limit_rate 配置了显示网络速率,则会显示,如果没有设置,则显示0。
9)$remote_port;
#客户端请求 Nginx 服务器时随机打开的端口,这是每个客户端自己的端口。
演示:注释掉 echo $http_user_agent
再输入echo $remote_port
保存后 reload
再来访问该网址,页面显示为48520
如果换火狐浏览器就显示为48614
10)$remote_user;
#已经经过 Auth Basic Module 验证的用户名。
11)$request_body_file;
#做反向代理时发给后端服务器的本地资源的名称。
演示:注释掉 echo $remote_port
再输入echo $request_body_file;
保存后 reload
再访问网址 magedu.net/index.html
这是做反向代理时才有,目前不显示
12)$request_method;
#请求资源的方式,GET/PUT/DELETE 等
演示:注释掉 echo $request_body_file;
再输入echo $request_method;
保存后 reload,再来访问
页面显示 GET
13)$request_filename;
#当前请求的资源文件的路径名称,由 root 或 alias 指令与 URI 请求生成的文件绝对路径,如 /apps/nginx/html/main/index.html
演示:注释掉echo $request_method;
再输入echo $request_filename;
再访问网址页面显示结果为 /data/nginx/html/pc/index.html
14)$request_uri;
#包含请求参数的原始 URI,不包含主机名,
如:/main/index.do?id=20190221&partner=search 。
演示:注释掉 echo $request_filename;
再输入echo $request_uri;
刷新前若在网址后增加?search=iphone11显示结果不变,刷新后显示结果为/index.html?search=iphone11
15)$scheme;
请求的协议,如 ftp,https, http 等。
演示:注释掉echo $request_uri;
再输入echo $scheme;
再访问刷新显示 http
16)$server_protocol;
#保存了客户端请求资源使用的协议的版本,如 HTTP/1.0,HTTP/1.1,HTTP/2.0等。
演示:注释掉echo $scheme;
再输入echo $server_protocol;
刷新后显示为 HTTP/1.1
17)$server_addr;
#保存了服务器的IP地址。
演示:注释掉echo $server_protocol;
再输入echo $server_addr;
再刷新页面为172.20.0.101
18)$server_name;
#请求的服务器的主机名
19)$server_port;
#请求的服务器的端口号
演示:输入echo $server_name;
echo $server_port;
刷新页面为172.20.0.101 www.magedu.net 80