Nginx配置-变量笔记 | 阿小信的博客
阿小信大人的头像
Life is short (You need Python) Bruce Eckel

Nginx配置-变量笔记2014-09-18 14:53

worker_processes auto;
daemon off;

events {
    worker_connections 256;
}

http {
    geo $dollar {
        default "$";
    }

    map $args $soo {
        default     0;
        debug       1;
        bug         2;
    }
    # 如果args==左边的key值,那么soo的值映射为右边的值,如果左边都不匹配则映射为default的值

    server {
        listen 8080;

        location /test {
            echo "This is a dollar sign: $dollar"; # $无法被转义
            echo "$dollar, $dollar";
            set $a "hello ";
            echo "${a}world";  # 连着了 消歧方法
        }



        # Nginx 变量的创建和赋值操作发生在全然不同的时间阶段。Nginx
        # 变量的创建只能发生在 Nginx 配置加载的时候,或者说 Nginx 启动的时候;
        # 而赋值操作则只会发生在请求实际处理的时候。

        location /foo {
            echo "foo = [$foo]"; # 不会报错 但是值为空,Nginx 变量名的可见范围虽然是整个配置,但每个请求都有所有变量的独立副本,或者说都有各变量用来存放值的容器的独立副本,彼此互不干扰。
        }

        location /bar {
            set $foo 32; # 变量名的可见范围是整个 Nginx 配置
            echo "foo = [$foo]";
        }

        # 内部跳转
        # Nginx 变量的生命期是与当前正在处理的请求绑定的,与location无关
        location /foo1 {
            set $a hi;
            echo_exec /bar1;
            # rewrite ^ /bar; # 另外一种内部跳转方式
        }

        location /bar1 {
            echo "a = [$a]";  # a = [hi] 当前正在处理的请求就还是原来那个
        }


        # 内建变量
        # 许多内建变量都是只读的,对只读变量进行赋值是应当绝对避免的, $args内建变量是可以修改的
        location /uri {
            echo "uri = $uri"; #获取当前请求的 URI(经过解码,并且不含请求参数)
            echo "request_uri = $request_uri"; # 获取请求最原始的 URI(未经解码,并且包含请求参数)
        }


        location /arg {
            set $name $arg_name;
            set_unescape_uri $name1 $arg_name; # uri解码

            echo "name: $name";   # name: ashin%20chen
            echo "name1: $name1"; # name1: ashin chen
        }

        # 映射
        location /map {
            set $orig_soo $soo;
            echo "original soo: $orig_soo";

            set $args debug;
            echo "soo: $soo";

            set $args bug;
            echo "soo: $soo";
        }
        # echo出的值都相同,因为变量在第一次读取时,根据映射规则计算出的 值被缓存住了。并非所有的变量都会缓存结果,$arg_XXX就不会


        #子请求
        location /main {
            set $var main;

            echo_location /m1;  #ngx_echo,ngx_lua,以及ngx_srcache在内的许多第三方模块都选择了禁用父子请求间的变量共享。“主请求”以及各个“子请求”都拥有不同的变量$var的值容器副本
            echo_location /m2;

            echo "main: $var";
        }

        location /m1 {
            set $var m1;
            echo "m1: $var";
        }

        location /m2 {
            set $var m2;
            echo "m2: $var";
        }


        # 数组
        location /arr {
            array_split "," $arg_names to=$array1;
            # 将names参数值按照逗号切分保存在$array1变量中
            array_map "[$array_it]" $array1;
            # 将$array1中的item以[ITEM]的形式进行map操作
            array_join " " $array1 to=$res;
            # 将$array1按照空格进行join成为新的字符串后赋值到$res

            echo $res;
        }
    }

}

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#WEB/前端#   #nginx
分享到:
阅读[1290] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

发表评论