nginx之location規(guī)則詳解
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
一、語法規(guī)則:
優(yōu)先級:
二、驗證: 1、精確匹配: 在conf.d文件夾下創(chuàng)建配置文件test.com.conf,內(nèi)容如下: 上圖中第一個和第二個location匹配條件一樣,都是/test.html,但第二個為精準匹配到靜態(tài)路徑,因此第一個不會執(zhí)行,會執(zhí)行第二個,www.test.com為本地域名解析,access_log和error_lor可以單獨為每個模塊定義日志 通過域名和路徑訪問后的內(nèi)容如下: 注意:路徑/usr/share/nginx/test_html文件夾下需要有test.html才可以正常訪問 上圖中指定靜態(tài)資源路徑用的關(guān)鍵字root,還可以用alias,那么root和alias的區(qū)別是什么?
如上圖中所示,請求的條件為test.html,通過root指定的路徑為/usr/share/nginx/test_html,因此在匹配的時候,這個路徑下就必須要有test.html這個文件才可以,否則就會找不到而報錯,如果用alias,那么通過瀏覽器進行請求的時候,alias也是指定到/usr/share/nginx/test_htm路徑下,但是會匹配默認的index.html,而無須強制匹配test.html,但是此時就不能使用”=”來進行精確匹配,現(xiàn)在將root改為alias,如圖: 注意:alias指定的路徑結(jié)尾要加”/” 下面的配置文件采用roo指定路徑,當(dāng)通過域名請求http://www.test.com/html/的時候,將跳轉(zhuǎn)到/usr/share/nginx/html/下的index.html頁面,如圖: 下面的配置文件采用alias指定路徑,請求http://www.test.com/linshi/的時候,將跳轉(zhuǎn)到/usr/share/nginx/test_html/index.html頁面,如圖: 2、通過^~方式實現(xiàn)匹配: 例如:下面配置文件有兩條規(guī)則,分別匹配url以字母a開頭,但是長度不同,首先將長的規(guī)則先注釋掉,如圖: 通過curl請求查看狀態(tài)碼,如圖: 說明:當(dāng)前只有一個規(guī)則開啟,因此當(dāng)匹配url以/a/開頭的任何url時,都會返回狀態(tài)碼666 現(xiàn)在將第二條規(guī)則注釋取消,打開規(guī)則,如圖: 再次發(fā)起同樣的請求,觀察返回狀態(tài)碼,如圖: 從上圖可以看出,兩條規(guī)則同時被匹配成功,但是第二條規(guī)則比較長,因此第二條規(guī)則優(yōu)先被匹配,如果^~匹配成功了,那么表示阻斷正則表達式,不再進行正則匹配 3、通過”~”方式實現(xiàn)匹配: 上圖中的匹配規(guī)則都是通過”^~”方式來實現(xiàn)的,那么在匹配最長規(guī)則的時候又分為兩種情況:
當(dāng)最長規(guī)則是通過普通匹配的時候,將會繼續(xù)正則匹配, 只要有一個正則成功,則使用這個正則的location,停止繼續(xù)匹配,返回結(jié)果 現(xiàn)在將第二條規(guī)則改為普通匹配,并添加一條正則匹配,如圖: 再次執(zhí)行同樣的請求命令,得到的狀態(tài)碼如下: 說明:從上圖可以看出請求/a/b/的時候,首先會到達第二條規(guī)則(最長規(guī)則),由于第二條規(guī)則為普通匹配(不是^~匹配),因此會繼續(xù)去匹配正則,也就是第三條規(guī)則,因此最終返回狀態(tài)碼為888 4、通過"~*"方式實現(xiàn)匹配: ” ~* ” 表示不區(qū)分大小寫的正則匹配 例如:通過url請求/a/b/或者/A/B/,查看返回狀態(tài)碼,如圖: 請求結(jié)果如下: 從上圖可以看出,無論匹配的是大寫還是小寫,都會返回對應(yīng)狀態(tài)碼888 常用方法還有匹配圖片后綴,并返回指定信息,如圖: 5、”!~*” 和”!~” 不常用,再次不做介紹 6、通過”/” 實現(xiàn)通用匹配: 本例子中,9091服務(wù)為httpd 第一種情況:proxy_pass最后面沒有斜杠,匹配路徑有斜杠(/bbb/),如圖: 說明:proxy_pass最后面沒有斜杠”/”,此時通過瀏覽器請求http://10.9.2.248/bbb/,那么實際訪問的地址就是 http://10.9.2.248:9091/bbb/,會將匹配路徑/bbb一起加過去 此時如果在http的目錄頁面目錄htdocs中創(chuàng)建目錄bbb,在bbb目錄下創(chuàng)建文件index.html,然后即可實現(xiàn)正常訪問,如圖: 第二種情況: proxy_pass最后面有斜杠 “/”,匹配路徑也有斜杠(/bbb/),如圖: 說明:proxy_pass最后面有斜杠”/”,此時通過瀏覽器請求http://10.9.2.248/bbb/,那么實際訪問的地址就是 http://10.9.2.248:9091,會將/bbb拋棄的,如圖: 第三種情況:proxy_pass后面還有其他路徑但是最后沒有 “/”, 匹配路徑也有斜杠(/bbb/) ,如圖: 說明,此時通過瀏覽器訪問http://10.9.2.248/bbb/index.html,實際請求的是http://10.9.2.248/cxxindex.html(注意位置是默認路徑下,不是ccc路徑下,如果proxy_pass的路徑為/ccc/ddd,那么實際請求的就是ccc路徑下的cccindex.html) 在httpd的默認路徑下(htdocs)創(chuàng)建文件cxxindex.html,然后訪問,如圖: 第四種情況: proxy_pass后面還有其他路徑但是最后有 “/”, 匹配路徑也有斜杠(/bbb/) ,如圖: 說明:此時通過瀏覽器訪問:http://10.9.2.248/bbb/index.html,實際訪問的是http://10.9.2.248/ccc/index.html 在httpd默認路徑下(htdocs)創(chuàng)建一個名稱為ccc的文件夾,在內(nèi)部定義一個index.html,然后訪問,如圖: 第五種情況:location匹配路徑末尾沒有 “/”,proxy_pass后面也沒有”/”,如圖: 說明:8081端口為httpd的服務(wù)器端口,如果匹配路徑和proxy_pass后都沒有”/”,那么此時訪問http://10.9.2.248/bbb,默認將請求到http://127.0.0.1:8081/bbb/index.html的內(nèi)容,此時在httpd默認路徑htdocs下創(chuàng)建文件夾bbb,內(nèi)部創(chuàng)建index.html,定義內(nèi)容為:i am match bbb,通過IP請求如圖: 更多內(nèi)容參考鏈接地址:https://www.ywdevops.cn/index.php/2021/11/08/nginx-5/ 閱讀原文:原文鏈接 該文章在 2025/7/1 23:22:45 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |