国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Nginx > 正文

Nginx配置指令location匹配符優先級和安全問題

2024-08-30 12:27:03
字體:
來源:轉載
供稿:網友

最近一直在做location 配置,遇到優先級別問題(如果配置不當可能存在安全隱患哦),以下是個人學習一點體會。

一、 location 的匹配符
1.等于匹配符:=
等于匹配符就是等號,特點可以概括為兩點:
精確匹配
不支持正則表達式
2.空匹配符
空匹配符的特點是:
匹配以指定模式開始的 URI
不支持正則表達式
3.正則匹配符:~
正則匹配符是可以使用正則表達式的匹配符。不過這里要強調的是,一般來說~是指:
區分大小寫的正則匹配
而~*表示:
不區分大小寫的正則匹配
但是對于一些對大小寫不敏感的操作系統,這兩者沒有區別。另外一個就是^~,其表示以指定模式開始的正則匹配。

4.內部訪問符:@
一般用于錯誤頁面等,這個暫不討論。

二、匹配符優先級
1.=
2.空匹配符,滿足精確匹配時
3.^~
4.~或~*
5.空匹配符,滿足以指定模式開始時的匹配時
這樣說比較抽象,我們來看例子吧。

2.1 等于匹配符與精確匹配時的空匹配符

看下面的例子(用到我們此前一起完成的Hello World模塊):
代碼如下:
location /poechant {
    hello_world no1;
}

location = /poechant {
    hello_world no2;
}
如果我們的請求是http://my.domian/poechant,則我們發現兩個location都與請求的 URI 匹配,這時根據我們的優先級順序,第一個是精確匹配時的空匹配符,第二個是等于匹配符,所以第二個的優先級高,也就是應該輸出:

hello_world, no2
同時也說明 Nginx 的 locatoin 不是按照配置文件中的書寫順序來匹配的。

2.2 精確匹配時的空匹配符與正則匹配的^~

下面這個例子中,兩者開始都精確匹配了,連這個正則匹配都是精確匹配。
代碼如下:
location ^~ ^/poechant$ {
    hello_world no1;
}

location /poechant {
    hello_world no2;
}
匹配哪一個?你測試一下,會得到:

hello_world, no2
與我們上面說的優先級順序相吻合。
2.3 其他匹配優先級比較的實例


三、實戰經驗總結

1.location 匹配的優先級(來自實踐總結中)
(location =) > (location 完整路徑 >) >(location ^~ 路徑) >(location ~* 正則) >(location 路徑)
只要匹配到,其它的都會忽略,然后返回到改匹配。
用以下例子來測試:

代碼如下:
#1   
location / {
   return 500;
}
#2
location /a/ {
    return 404;
}
#3
location ~* /.jpg$ {
    return 403;
}
#4
location ^~ /a/ {
    return 402;
}
#5
location  /a/1.jpg {
    return 401;
}
#6
location = /a/1.jpg {
    return 400;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 揭东县| 盐城市| 安龙县| 蓬溪县| 镇沅| 道真| 余庆县| 郴州市| 东乌| 东光县| 宁德市| 宁都县| 崇仁县| 松溪县| 扬中市| 蓝山县| 托里县| 华容县| 红桥区| 垫江县| 荔波县| 毕节市| 临汾市| 韶关市| 台北市| 永福县| 宁远县| 英德市| 开远市| 湄潭县| 蓬安县| 天全县| 通州市| 新晃| 天等县| 哈密市| 长岭县| 衡阳市| 叙永县| 工布江达县| 上饶市|