天天看点

Nginx 变量漫谈(二)

关于 Nginx 变量的另一个常见误区是认为变量容器的生命期,是与 <code>location</code> 配置块绑定的。其实不然。我们来看一个涉及“内部跳转”的例子:

但如果我们从客户端直接访问 <code>/bar</code> 接口,就会得到空的 <code>$a</code> 变量的值,因为它依赖于 <code>location /foo</code> 来对 <code>$a</code>进行初始化。

    从上面这个例子我们看到,Nginx 变量值容器的生命期是与当前正在处理的请求绑定的,而与 <code>location</code> 无关。

然后在命令行上使用各种参数组合去请求这个 <code>/test</code> 接口:

其实 <code>$arg_name</code> 不仅可以匹配 <code>name</code> 参数,也可以匹配 <code>NAME</code> 参数,抑或是 <code>Name</code>,等等:

Nginx 会在匹配参数名之前,自动把原始请求中的参数名调整为全部小写的形式。

现在我们再看一下效果:

空格果然被解码出来了!

这个有问题的配置会让 Nginx 在启动的时候报出一条令人匪夷所思的错误:

继续阅读