nginx变量详解

        Nginx 作为一个高性能的 HTTP 和反向代理服务器,支持多种变量,这些变量在配置文件(如 nginx.conf)和模块中被广泛使用,用于控制请求的处理、日志记录、重定向等。Nginx 变量主要分为内置变量(也称为系统变量)和自定义变量。

        所有的Nginx变量在Nginx配置文件中引用时都须带上$前缀。Nginx变量只能存放一种类型的值,即字符串类型。通过变量,可以简化配置、提高配置的灵活性。

一、内置变量

以下是常用的内置变量:

变量名描述
$host来自请求行的主机(Host)名,或者处理请求的服务器名称。如果请求行中没有主机(Host)名,则等于设置的服务器名称。
$remote_addr客户端的IP地址。
$request_uri请求的URI,包括参数。
$server_name处理该请求的服务器名称。
$server_protocol请求使用的协议,例如 “HTTP/1.0”, “HTTP/1.1” 或 “HTTP/2.0”。
$request_method请求使用的方法,如"GET"或"POST"等。
$scheme客户端请求的协议,如"http"或"https"。
$http_user_agent客户端浏览器的用户代理字符串,用于识别客户端的类型和版本。
$http_referer客户端请求的来源页面,用于追踪请求的来源。
$http_cookie客户端发送的所有Cookie,可以用于处理基于Cookie的认证或会话管理。
[root@localhost ~]#vim /apps/nginx/conf.d/dh.conf
server {  
    listen 80;  
    server_name www.dh.com;
    root /opt/;    
    location /main {  
        index index.html;  
        default_type text/html;  
   
        echo "hello world, main-->";  
        echo "Remote Addr: $remote_addr";  
        echo "Args: $args";  
        echo "Arg User: $arg_user";  
        echo "Document Root: $document_root";  
        echo "Document URI: $document_uri";  
        echo "Host: $host";  
        echo "User Agent: $http_user_agent";  
        echo "Scheme: $scheme";  
  
    }  
}
[root@localhost ~]#nginx -s reload

 输出

[root@localhost ~]# curl 127.0.0.1
hello world, main-->  
Remote Addr: 192.168.1.1  
Args:   
Arg User: dh
Document Root: /opt  
Document URI: /main  
Host: www.dh.com  
User Agent: curl/7.29.0   
Scheme: http  

二、自定义变量

自定义变量是在Nginx配置中由用户定义的变量,它们可以通过set指令在serverlocationif等上下文中定义。

server {
        listen 80;
        server_name     localhost;
        location / {
                set $first "hello ";
                echo "${first}world";
        }
}
或者
server {
        listen 80;
        server_name     localhost;
        location / {
                set $first "hello";
                echo "$first world";
        }
}

输出

[root@localhost ~]# nginx -s reload 
[root@localhost ~]# curl 127.0.0.1
hello world

三、变量的作用域和生命周期

Nginx中的变量具有作用域和生命周期的概念。变量的作用域决定了在哪里可以访问该变量,而生命周期决定了变量何时被创建和销毁。以下是Nginx中变量的一些常见作用域和生命周期:

  • server:在server块内定义的变量具有局部作用域,仅在该server块内有效。当一个新的请求到达时,Nginx会为每个请求创建一个新的进程,因此每个进程都有自己的变量副本。当请求处理完成后,进程会被销毁,与之相关的变量也会被销毁。
  • location:在location块内定义的变量具有局部作用域,仅在该location块内有效。与server块类似,当一个新的请求到达时,Nginx会为每个请求创建一个新的进程,因此每个进程都有自己的变量副本。当请求处理完成后,进程会被销毁,与之相关的变量也会被销毁。
  • http:在http块内定义的变量具有全局作用域,在整个配置文件中都有效。这意味着在一个server块或一个location块内定义的同名变量会覆盖全局变量的值。由于全局变量是在主进程中创建的,因此它们在整个服务器的生命周期内都是可用的。但是,需要注意的是,全局变量的使用可能会导致配置复杂性增加,因此应谨慎使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值