您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页nginx浅析

nginx浅析

来源:二三娱乐

使用echo模块

  1. 编译时加载 echo module
    --add-module=/$yourPath/echo-nginx-module
  2. 在配置文件中增加一段
        location /echomodule {
            set $foo 'hello';
            echo "foo: ${foo},world!";
        }
  1. 验证
curl 'http://localhost/echomodule
  1. TIPS:
    a. set的作用,包括创建一个变量,给该变量赋值,两个部分

变量的创建、赋值所处的生命周期以及作用域

  1. 假设有如下配置
    location /foo0 {
        echo ">>> ${foo1} <<<";
    }
> 检测语法时,提示foo1是个未知变量
``` shell
nginx: [emerg] unknown "foo1" variable
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
  1. 再新增加一段配置,使用set创建变量foo1
        location /foo0 {
            echo ">>> ${foo1} <<<";
        }
        location /foo1 {
            set $foo1 'foo 1';
            echo ">>> ${foo1} <<<";
        }

语法显示syntax is ok,但是curl foo0的时候,却总是返回空值,说明创建变量是在加载配置的时候发生的,而赋值变量是在每一次请求时候发生的,因此在curl foo0时,虽然在加载配置时,创建了变量foo1,但是赋值操作并没有进行

  1. 修改foo0的配置,给foo0赋值
        location /foo0 {
            set $foo0 $foo1;
            echo ">>> ${foo0} <<<";
        }

curl foo0的结果依然为空,更加验证了上述观点,即在配置加载的时候,创建了两个变量,foo0和foo1,当curl foo1的时候,foo1 被赋值为 u'foo 1',curl不为空;当curl foo0的时候,foo0 期望被赋值为foo1,然而foo1在location /foo0是没有被赋值过的,nginx将foo0赋值了一个空值,因此curl返回结果为空

  1. TIPS:

a. 在nginx中,变量的一次请求就是完整的生命周期,虽然curl foo1的时候foo1被赋值,但是当curl foo0时,由于两次生命周期是互相隔离的,因此在另一个生命周期中,set $foo0 $foo1;相当于将$foo0赋值为空串

再谈变量的生命周期与作用域

  1. 假设有如下配置
        location /foo2 {
            set $foo1 'you see foo 2';
            rewrite ^ /foo3;
        }
        location /foo3 {
            echo ">>> ${foo1} <<<";
        }

curl foo2得到的结果为>>> you see foo 2 <<<,而直接curl foo3得到的结果为空,可以看到变量的一个完整的生命周期是与location无关,并且,一次rewrite并不会影响变量的生命周期

内建变量

  1. nginx有一些buildin的变量,包括uri,request_uri,args等,以及通过arg_xxx的形式获取传入参数的值,假设有如下配置
        location /buildin {
            echo ">>> uri: $uri <<<";
            echo ">>> request_uri: $request_uri <<<";
            echo ">>> args: $args <<<";
            echo ">>> x: $arg_x <<<";
            echo ">>> y: $arg_y <<<";
        }
    uri: /buildin
    request_uri: /buildin?x=0&y=0
    args: x=0&y=0
    x: 0
    y: 0
  1. 强制修改内建变量

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务