0.nginx阶段分水岭:
0.1:变量生成阶段
0.2:内容输出阶段(content后包括content阶段)
e.g.
单set,单echo
现在就来看这样一个令人困惑的例子:
? location /test { ? set $a 32; ? echo $a; ? ? set $a 56; ? echo $a; ? }
从这个例子的本意来看,我们期望的输出是一行 32
和一行 56
,因为我们第一次用 echo 配置指令输出了 $a
变量的值以后,又紧接着使用 set 配置指令修改了 $a
. 然而不幸的是,事实并非如此:
$ curl 'http://localhost:8080/test 56 56
我们看到,语句 set $a 56
似乎在第一条 echo $a
语句之前就执行过了。这究竟是为什么呢?难道我们遇到了 Nginx 中的一个 bug?
显然,这里并没有 Nginx 的 bug;要理解这里发生的事情,就首先需要知道 Nginx 处理每一个用户请求时,都是按照若干个不同阶