Nginx变量

    Nginx变量只有一种字符串类型,变量名前使用$符号来引用变量。但不支持通过转衣服来便是$符号,可使用ngx_geo模块来表示,如:

    geo $dollar {

        default "$";

    },可使用$dollar来表示$。

    Nginx的set指令首先在nginx启动加载配置时创建变量,而变量的赋值发生在请求处理的时候。其可见范围为整个Nginx配配置。但注意,Nginx 变量名的可见范围虽然是整个配置,但每个请求都有所有变量的独立副本,或者说都有各变量用来存放值的容器的独立副本,彼此互不干扰。

    内部跳转指的是在一个请求过程中从一个location跳转到另外一个的过程,由ngx_echo rewrite引起的。而外部跳转指的是状态码为301和302这样的跳转。在内部跳转中由于是同一个请求因此变量没有变化,即便location发生变化,仍是同一个副本。

    Nginx变量分为两种,一种是set等指令创建的变量是用户自定义变量,另一种是Nginx预定义的内建变量,包含请求或响应的各种信息,如$uri回去经过解码不含参数的URI,而$request_uri表示未经解码包含参数的URI。需注意nginx会将参数名转为小写匹配。内建变量没有容器的概念,每次用时都需要nginx去计算得到。$args支持写操作,修改URL参数串。拥有值容器的变量在 Nginx 核心中被称为“被索引的” ;反之,则被称为“未索引的”。像 $arg_XXX 这样具有无数变种的变量群,是“未索引的”。 当读取这样的变量时,其实是它的“取处理程序”在起作用,即实时扫描当前请求的 URL 参数串,提取出变量名所指定的 URL 参数的值。 

    nginx map模块指令就可以用于定义两个 Nginx 变量之间的映射关系,

        map $args $foo {

            default 0;

            debug 1;

         },当 $args 的值等于 debug 的时候,$foo 变量的值就是 1,否则 $foo 的值就为 0。ngx_map 模块认为变量间的映射计算足够昂贵,需要自动将因变量的计算结果缓存下来,这样在当前请求的处理过程中如果再次读取这个因变量,Nginx 就可以直接返回缓存住的结果。ngx_geo模块也会缓存结果。

    Nginx中请求分为主请求和子请求。主请求是 HTTP 客户端从 Nginx 外部发起的请求,而子请求是Nginx内部进行的请求,是把主请求拆分为多个更小力度的请求并行或串行的执行。由echo_location触发,子请求智键和主请求的变量都有各自独立的副本,ngx_echo, ngx_lua等也是。而ngx_auth_request触发的子请求与主请求共享变量容器,但会忽略子请求的响应体。

    echo_location 第一个参数指定“子请求”的 URI ,第二个参数指定“子请求”的 URL 参数串。但通过$request_method和$request_uri获取的都主作用于主请求,$echo_request_method作用于子请求。

    Nginx中变量创见了但未赋值则为不合法,而如果URL参数中没有要获取的参数则为没找到。但由于Nginx中只有一种字符串类型,因此都被转换为空字符串。获取“不合法”的变量在Nginx日志中有提示,而“未找到”没有,如果对该种变量作区分可借助lua中nil类型实现。如:

content_by_lua

    'if ngx.var.arg_name == nil then

        ngx.say("name: missing")
    else
        ngx.say("name: [", ngx.var.arg_name, "]")
    end
';

当 $arg_name 的值为“没找到”( 或者“不合法”) 时为nil。

    

    

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值