nginx——location 优先级
一、 location 的匹配符
1.等于匹配符:=
等于匹配符就是等號,特點可以概括為兩點:
精確匹配
不支持正則表達式
2.空匹配符
空匹配符的特點是:
匹配以指定模式開始的 URI
不支持正則表達式
3.正則匹配符:~
正則匹配符是可以使用正則表達式的匹配符。不過這里要強調的是,
一般來說~是指:區分大小寫的正則匹配
而~*表示:???????? 不區分大小寫的正則匹配
但是對于一些對大小寫不敏感的操作系統,這兩者沒有區別。?
^~表示只匹配字符串,不查詢正則表達式
二、優先級的實例
location ~ ^/poechant$ {return 400; }location =/poechant {return 403; }結果顯示 403 forbdden
location ~ ^/poechant$ {return 400; }location /poechant {return 403; }結果顯示 400 Bad Request
根據以上可以大體判斷了解? location的優先級別以及流程。
還需要驗證是不是事實
1、首先精確匹配 也就是帶著 =的location? 找到之后直接結束解析過程并返回。
2、其次匹配普通匹配,并記錄最長的匹配,此時首先不返回。匹配最長的。
3、再匹配正則表達式,以~開始的,正則表達式,按照順序從上到下匹配,找到匹配之后立即返回,沒有匹配到則返回普通匹配的最長的匹配。如果普通匹配沒有匹配到頁面,則返回 404 not found。
優先級別??? 精準匹配 = >正則匹配 >普通匹配(比如 /a?? /a/1.jpg 等 包括 ^~表示之匹配字符串不查詢正則表達式)
?
#1 location / {return 404; }#2 #location /a/ { # return 404; #}#3 location ~* \.jpg$ {return 403; }#4 location ~ ^/a/ {return 404; }#5 location ^~ /a/ {return 402; }#6 location /a/1.jpg {return 401; }#7 location = /a/1.jpg {return 400; }?
測試的時候,先要將#2全部注釋掉,不然會認為#2 與#4 完全一樣。會提示:重復配置,提示如下
[emerg]: duplicate location "/a/" in D:\nginx-0.8.7/conf/nginx.conf:53每一次都訪問 localhost:8080/a/1.jpg
第一次訪問? 說明匹配 #7 精準匹配
?
?
把7注釋掉? 然后訪問 ??? 說明 3正則匹配匹配成功
接下來互換3跟4
#4 location ~ ^/a/ {return 404; }#3 location ~* \.jpg$ {return 403; }再一次訪問?? 說明正則表達式 是按照從上往下的順序匹配的? 匹配成功就停止? 同時也驗證了 匹配的順序是 首先 匹配普通匹配? 并記錄最長的匹配?? 然后匹配正則表達式 ,找到之后
停止匹配。
把 3、4注釋掉?? 訪問? 匹配 6成功? 普通匹配匹配最長的
注釋掉 6之后? 匹配5成功?? ^~ 以指定的 模式開始的?
?
轉載于:https://www.cnblogs.com/timelesszhuang/p/4628951.html
總結
以上是生活随笔為你收集整理的nginx——location 优先级的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小吃哪里好 探寻美食之都的小吃胜地?
- 下一篇: 【转】Asp.net MVC Comet