WEB服务与NGINX(12)-NGINX的变量
1. nginx的变量
nginx的变量可以在配置文件中引用,作为功能判断或日志等场景使用,变量可以分为内置变量和自定义变量。
内置变量的官方查看地址为:http://nginx.org/en/docs/varindex.html
1.1 内置变量
内置变量由nginx模块自带,通过变量可以获取到众多的与客户端访问相关的属性值。
变量名称 | 意义 |
---|---|
$remote_addr | 客户端ip地址,指的是公网IP地址 |
$remote_user | 客户端验证的用户名 |
$remote_port | 客户端请求nginx时随机打开的端口,指客户端端口 |
$http_user_agent | 客户端浏览器类型 |
$request | 客户端请求报文的完整信息,例如:GET /image/ HTTP/1.1 |
$document_uri | 存放了请求的URL中不包含指令的URI部分,例如http://www,baidu.com/index.do?id=20200101&partner=search中的/index.do |
$document_root | 当前请求的资源的系统根目录,即root定义的目录 |
$request_filename | 当前请求的资源文件的路径名称,指的是在服务器磁盘上的绝对路径 |
\(request_uri | 包含请求参数的原始URI,不包含主机名,例如http://www,baidu.com/index.do?id=20200101&partner=search中的/index.do?id=20200101&partner=search,与\)uri相同 | |
$args | 存放了URL中的指令,例如http://www,baidu.com/index.do?id=20200101&partner=search中的id=20200101&partner=search |
$request_method | 请求资源的方法,GET/PUT等 |
$host | 存放了请求报文中请求的host名称,即域名 |
$request_time | 请求处理时间(以秒为单位),分辨率为毫秒;从客户端读取第一个字节与发送最后一个字节后的日志写入之间的时间 |
$request_length | 请求报文长度(包括请求行、标头和请求正文) |
$request_body_file | 做反向代理时发给后端服务器的本地资源的名称 |
$http_cookie | 客户端的cookie信息 |
$scheme | 请求的协议,如http,https等 |
$server_protocol | 保存了客户端请求资源使用的协议版本,如HTTP/1.0 HTTP/2.0 HTTP/1.1 |
$server_addr | 保存了服务器的IP地址 |
$server_name | 请求的服务器的主机名 |
$server_port | 请求的服务器的端口号 |
$status | 状态码 |
$body_bytes_sent | 应答报文body部分的大小 |
$bytes_sent | 发送给客户端的字节数 |
$time_local | 当前本地的系统时间 |
$time_iso8601 | 本地时间,ISO 8601标准格式 |
$msec | 以毫秒表示写入时间 |
$http_x_forwarded_for | 进行反向代理后,客户端的真实IP地址。 |
$http_referer | 表示从哪个页面跳转过来的 |
$gzip_ratio | 压缩比 |
$connection_requests | 通过一个连接共请求的当前请求数(1.1.18) |
$connection | 连接序列号 |
1.2 自定义变量
-
set $variable value
Context:sever,http,location
声明变量的内容,注意nginx中的变量必须都以$开头。
支持把一个变量的值赋值给自定义变量。例如set $my_port $server_port;
-
变量的作用域
在不同层级的标签中声明的变量性的可见性规则如下:
- location标签中声明的变量中仅对这个location块可见;
- server标签中声明的变量对server块以及server块中的所有子块可见;
- http标签中声明的变量对http块以及http块中的所有子块可见;
-
自定义变量示例
#1.在nginx配置文件中自定义变量: [root@nginx01 ~]# vim /etc/nginx/conf.d/virtualhost.conf server { listen 80; server_name www.nginx02.com; set $name xuzhichao; location / { root /data/nginx/html/web2; index index.html; } location /a { return 200 $name\n; <==此处无需使用引号; } location /b { set $name momo; return 200 $name\n; } } #2.重启nginx服务 [root@nginx01 ~]# systemctl reload nginx.service #3.客户端测试 [root@xuzhichao ~]# curl http://www.nginx02.com/a xuzhichao [root@xuzhichao ~]# curl http://www.nginx02.com/b momo