nginx 的配置代码不是按顺序执行的吗

2020 年 1 月 11 日
 jugelizi

如果文件不存在
先判断是否制定类型 执行跳转 if(uri ) 其他不存在的 执行其他事务

好像这样不行

5602 次点击
所在节点    NGINX
12 条回复
alexliux
2020 年 1 月 11 日
规则长的优先
xiri
2020 年 1 月 11 日
不是,有专门的优先级的,好象是正则方式匹配的优先级最高,/的优先级最低(不保证正确性),中间还有好多类
wd
2020 年 1 月 11 日
搜索下 why nginx if is evil
xmlf
2020 年 1 月 11 日
我遇到 deny IP 段竟然不起作用的情况。实验自己的 ip 段没问题。我也郁闷死了!
hcymk2
2020 年 1 月 11 日
agentzh 的 Nginx 教程
xmlf
2020 年 1 月 11 日
@hcymk2 感谢。
之所以不起作用是因为 rewrite 指令在 access 指令之前执行。
adoal
2020 年 1 月 11 日
nginx 配置语法是描述式的,不是过程式的
kidlj
2020 年 1 月 11 日
if 属于 rewrite module,rewrite module 优先级高。看官方文档,英文的。
bobuick
2020 年 1 月 11 日
ngx 的 parser 是分几个阶段的,不同的 direct 写在不同位置处在的 parser 阶段不一样,并不是完全按书写顺序来定的,而是看 parser 阶段。
Citrus
2020 年 1 月 11 日
新手大概率会犯的错误:认为 Nginx 配置文件是并行的。
建议去看春哥的 Nginx 教程,Nginx 处理请求是有生命周期的。实际上每一个不同的配置是在不同的生命周期里执行的。靠前的生命周期中的配置项就算是写到最末尾,也是优先执行的。
比如:
```
location /test {
set $a 1;
echo $a;

set $a 2;
echo $a;
}
```
实际输出的是两个 2,而不是一个 1 一个 2。因为 set 是 rewrite 阶段执行,echo 是 content 阶段执行,因此就算你是交叉写的,第一个 echo 也不会会比第二个 set 先执行。
loading
2020 年 1 月 11 日
一般路由地址也是深度优先的
msg7086
2020 年 1 月 12 日
不是顺序执行的。倒不如说这是配置而不是代码,所以根本不能 执行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/637047

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX