@
WhiteLament 大概看了下『为楼上“同一个文件里的优先级”补充一下 』,发现你对 Nginx localtion 规则有很大的误解;很多人可能也一样,最开始我也是这么理解的,但没有亲自去验证。(这里并无任何冒犯的意思~
看到这里,觉得有必要补充下,在 Nginx 你编写指令的先后顺序一般情况下并没有那么重要,要取决于 Nginx 内部的解析阶段、机制。摘录 《 Nginx 开发从入门到精通》的部分
http://tengine.taobao.org/book/chapter_11.html#id91. Nginx 路径的分类
- 普通前端匹配的路径,例如 location / {}
- 抢占式前缀匹配的路径,例如 location ^~ / {}
- 精确匹配的路径,例如 location = / {}
- 命名路径,比如 location @
a {}
- 无名路径,比如 if {}或者 limit_except {}生成的路径
2. Nginx location 的大致匹配顺序
- 精确匹配的路径和两类前缀匹配的路径(字母序,如果某个精确匹配的路径的名字和前缀匹配的路径相同,精确匹配的路径排在前面)
- 正则路径(出现序)
- 命名路径(字母序)
- 无名路径(出现序)
看原文链接更加详细,还有代码示例。以上是原理,推荐系统性的学习、实践下。
其实还有一个很朴素的办法:实践,通过实践去验证自己的猜想;而非让它们停留在猜想甚至是臆想的阶段。
推荐大家可以看看我总结的分享《 Nginx Essential 》
https://www.slideshare.net/DylannininGogh/nginx-essential-68703694,这里做了一个简单的总结,也有测试的配置。若有任何错误、疏漏,请随时批评指正。