nginx 里实现多重嵌套 if 配置

在配置 nginx 的时候,有时候往往会有多重嵌套 if 的需求,例如判断 a = b 并且 b = c 时才执行某个配置段。

作为一个程序员,很容易就想到代码式的配置,例如:

if ($host ~* "zhetenga.com" && $request_uri = "/zhetenga.com/") {

...

}

但很明显,这样是不行的,nginx 会直接告诉你这段配置是错误的,那就改为:

if ($host ~* "zhetenga.com") {

if ($request_uri = "/zhetenga.com/"") {

...

}

}

很明显,nginx 会再次拒绝你。

那么是不是就没有办法实现这种需求了呢?其实并不是的,强大的 nginx 配置让你有办法变通一下。

if ($host ~* "zhetenga.com") {

set $test "A";

}

if ($request_uri = "/zhetenga.com/"") {

set $test "${test}+B";

}

if ($test = "A+B") {

...

}

完美解决,折腾起来吧。

2015年12月01日