If Is Evil

  1. nginx 是分阶段执行的,并不像 C 这种编程语言一样顺序执行。指令执行的顺序和书写的顺序没有太大关系(跟具体模块的实现有关),一个 phase 执行完了就会执行到下一个阶段。
  2. if 属于 rewrite 模块的,所以对于 if 来讲,会和其他的 rewrite 模块执行全部执行完之后再进行下一阶段。如果 if 指令的结果是 match 的,那么 if 会创建一个内嵌的 location 块,只有这里面的 content 处理指令(NGX_HTTP_CONTENT_PHASE 阶段)会执行。
  3. 问题所在:有的模块会继承 outter scope,有的则不会,所以结果会与预期不同。
参考
  • Nginx if 指令工作原理
  • Nginx配置陷阱之万恶的if指令
  • If Is Evil

你可能感兴趣的:(If Is Evil)