If Is Evil
2019-07-30 本文已影响4人
gzgogo
- nginx 是分阶段执行的,并不像 C 这种编程语言一样顺序执行。指令执行的顺序和书写的顺序没有太大关系(跟具体模块的实现有关),一个 phase 执行完了就会执行到下一个阶段。
-
if
属于rewrite
模块的,所以对于if
来讲,会和其他的rewrite
模块执行全部执行完之后再进行下一阶段。如果if
指令的结果是 match 的,那么if
会创建一个内嵌的location
块,只有这里面的content
处理指令(NGX_HTTP_CONTENT_PHASE
阶段)会执行。 - 问题所在:有的模块会继承 outter scope,有的则不会,所以结果会与预期不同。