Nginx的location的常見規(guī)則優(yōu)先級(jí)問題
locaiton有四種類型的匹配規(guī)則,分別為完全匹配(=)、前綴普通匹配(^~)、正則表達(dá)式匹配(~或者~*)、普通匹配
規(guī)則
- 等號(hào)類型(=)的優(yōu)先級(jí)最高。一旦匹配成功,則不再查找其他匹配項(xiàng)
- 前綴普通匹配(^~)優(yōu)先級(jí)次之。不支持正則表達(dá)式。使用前綴匹配,如果有多個(gè)location匹配的話,則使用表達(dá)式最長的那個(gè)
- 正則表達(dá)式類型(~ ~*)的優(yōu)先級(jí)次之。一旦匹配成功,則不再查找其他匹配項(xiàng)
- 常規(guī)字符串匹配,如果有多個(gè)location匹配的話,則使用表達(dá)式最長的那個(gè)
說明
- 先判斷精準(zhǔn)命中,如果命中,立即返回結(jié)果并結(jié)束解析過程
- 若未結(jié)束,判斷前綴普通命中,如果有多個(gè)命中,使用表達(dá)式“最長”的命中結(jié)果,結(jié)束解析過程
- 若未結(jié)束,繼續(xù)判斷正則表達(dá)式的匹配,按正則表達(dá)式順序?yàn)闇?zhǔn),由上至下一旦匹配成功1個(gè),立即返回結(jié)果,并結(jié)束解析過程
- 若未結(jié)束,繼續(xù)普通命中,普通命中和前綴普通命中相似,順序無所謂,按照location表達(dá)式的長短來確定命中結(jié)果
Location,用來快速進(jìn)行資源定位,定義不同方式來處理或解決url請(qǐng)求,一般有:/ , = /, ~, ~* ,^~
優(yōu)先級(jí)是:(location = /)>(localtion^~)>(location ~| ~* )>(location /)
其中,~ 與 ~*,誰在上面先匹配誰.
一、Location / 匹配
# "/" 是直接到nginx發(fā)布目錄/usr/local/nginx/html/里來查資源,比如location.html location / { root html; index index.html index.htm; }
在發(fā)布目錄里創(chuàng)建location.html文件,內(nèi)容為:this is location.html。
執(zhí)行172.16.0.9/location.html時(shí),服務(wù)器發(fā)布目錄里找這個(gè)location.html文件,并把結(jié)果this is loction.html返回出來,如下:
root@backupserver:/usr/local/nginx/html# ls 50x.html index.html root@backupserver:/usr/local/nginx/html# echo "this is location.html" > ./location.html root@backupserver:/usr/local/nginx/html# ls 50x.html index.html location.html root@backupserver:/usr/local/nginx/html# /usr/local/nginx/sbin/nginx -s reload root@backupserver:/usr/local/nginx/html# curl 172.16.0.9/location.html this is location.html root@backupserver:/usr/local/nginx/html#
二、Location = / 匹配
精準(zhǔn)定位 一般用來匹配某個(gè)文件,優(yōu)先級(jí)高于 /
比如:
在nginx配置文件中增加一個(gè)location = / ,定位到/data目錄。如下:
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { autoindex on; root html; index index.html index.htm; } location = /location.html { root /data/; index index.html; }
重啟Nginx服務(wù),測試:
1、先不在/data/目錄創(chuàng)建location.html。
可以看到,報(bào)404錯(cuò)誤。這是因?yàn)椋? / 優(yōu)先級(jí)高于/ ,服務(wù)器去第二個(gè)location里尋找location.html這個(gè)文件,而不是去第一個(gè)location里找。由于第二個(gè)location指定的目錄是/data,/data目錄下沒有l(wèi)ocation.html文件
在/data目錄下創(chuàng)建location.html文件
root@backupserver:/usr/local/nginx/html# ls /data/ www root@backupserver:/usr/local/nginx/html# echo "this is other location.com" > /data/location.html root@backupserver:/usr/local/nginx/html# ls 50x.html index.html location.html root@backupserver:/usr/local/nginx/html# curl 172.16.0.9/location.html this is other location.com root@backupserver:/usr/local/nginx/html#
上面可以看到,訪問 服務(wù)器是,服務(wù)器首先去location = /里面找,即使它在另一個(gè)location下面。精準(zhǔn)匹配優(yōu)先級(jí)是最高的,它不論是在配置文件內(nèi)容上面還是下面,服務(wù)器首先去找精準(zhǔn)匹配的內(nèi)容
除以精準(zhǔn)匹配,還有~ ,~* ,^~
~是對(duì)大小寫敏感,匹配時(shí)嚴(yán)格大小寫
~* 是對(duì)大小寫不敏感,匹配時(shí)不分大小寫。
^~用來匹配以u(píng)ri開頭,匹配成功以后,會(huì)停止搜索后面的正則表達(dá)式匹配。
以上優(yōu)先最高的是精準(zhǔn)匹配。location = /,其次是:^,然后是 和~* 這兩種看準(zhǔn)在配置文件內(nèi)容上面,就先匹配誰,優(yōu)先級(jí)最低的是 /
以上規(guī)則在使用nginx時(shí)會(huì)被廣泛使用,比如多臺(tái)服務(wù)器做網(wǎng)站動(dòng)靜分離時(shí):
location ~ .*\.(html|htm|js|css|txt|png|jpg|jpeg|doc)$ { root html; }
到此這篇關(guān)于Nginx的location的常見規(guī)則優(yōu)先級(jí)的文章就介紹到這了,更多相關(guān)Nginx location規(guī)則優(yōu)先級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx反向代理location和proxy_pass配置規(guī)則詳細(xì)總結(jié)
- nginx 配置location匹配規(guī)則實(shí)例講解
- Nginx Location指令URI匹配規(guī)則詳解小結(jié)
- Nginx location匹配規(guī)則的方法示例
- nginx配置location總結(jié)location正則寫法及rewrite規(guī)則寫法
- 詳解nginx配置location總結(jié)及rewrite規(guī)則寫法
- 詳解Nginx location 匹配規(guī)則
- Nginx服務(wù)器的location指令匹配規(guī)則詳解
- nginx中的路徑匹配location規(guī)則詳解
相關(guān)文章
nginx通過https部署vue項(xiàng)目的完整步驟
在實(shí)際開發(fā)中,我們會(huì)以https形式進(jìn)行頁面訪問,下面這篇文章主要給大家介紹了關(guān)于nginx通過https部署vue項(xiàng)目的完整步驟,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Nginx實(shí)現(xiàn)瀏覽器可實(shí)時(shí)查看訪問日志的步驟詳解
我們經(jīng)常需要在頁面上實(shí)時(shí)查看nginx的日志輸出,并且能在頁面上顯示,那么下面小編就給大家說下怎么在瀏覽器上實(shí)時(shí)動(dòng)態(tài)的查看nginx的訪問日志,有需要的朋友們可以參考借鑒。2016-09-09Nginx-Proxy-Manager可視化管理平臺(tái)的使用
Nginx-Proxy-Manager是一個(gè)基Web的Nginx服務(wù)器管理工具,它允許用戶通過瀏覽器界面輕松地管理和監(jiān)控Nginx服務(wù)器,本文主要介紹了Nginx-Proxy-Manager可視化管理平臺(tái)的使用,感興趣的可以了解一下2024-08-08關(guān)于使用Keepalived實(shí)現(xiàn)Nginx的自動(dòng)重啟及雙主熱備高可用問題
這篇文章主要介紹了使用Keepalived實(shí)現(xiàn)Nginx的自動(dòng)重啟及雙主熱備高可用,本文通過幾個(gè)問題解析幫助大家學(xué)習(xí)Keepalived實(shí)現(xiàn)Nginx的自動(dòng)重啟的相關(guān)知識(shí),需要的朋友可以參考下2021-09-09nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_por
nginx為了實(shí)現(xiàn)反向代理的需求而增加了一個(gè)ngx_http_proxy_module模塊,其中proxy_set_header指令就是該模塊需要讀取的配置文件,這篇文章主要介紹了nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_port區(qū)別,需要的朋友可以參考下2024-03-03