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;

  • 变量的作用域

    在不同层级的标签中声明的变量性的可见性规则如下:

    1. location标签中声明的变量中仅对这个location块可见;
    2. server标签中声明的变量对server块以及server块中的所有子块可见;
    3. 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
    
posted @ 2021-06-19 23:31  向往自由的独行者  阅读(289)  评论(0编辑  收藏  举报