3分鐘秒懂nginx中的location指令

2021-10-08 18:36:48 字數 3827 閱讀 1311

5. 匹配問號後的引數

6. location uri結尾帶不帶/

7. 命名location

8. 案例

location指令是nginx中最關鍵的指令之一,location指令的功能是用來匹配不同的url請求,進而對請求做不同的處理和響應,這其中較難理解的是多個location的匹配順序,本文會作為重點來解釋和說明。

nginx用請求urilocation中配置的uri做匹配。

location有兩種格式:

location [ = | ~ | ~* | ^~ ] uri

location @name引數

解釋空location後沒有引數直接跟著uri,表示字首匹配,代表跟請求中的uri從頭開始匹配。

~執行乙個正則匹配,區分大小寫。

~*執行乙個正則匹配,不區分大小寫。

^~普通字元匹配,多用來匹配目錄。

=執行普通字元精確匹配。

@「@」 定義乙個命名的location,@定義的locaiton名字一般用在內部定向,例如error_page,try_files命令中。它的功能類似於程式設計中的goto

nginx有兩層指令來匹配請求uri=>

第乙個層次是server指令,它通過網域名稱ip來做第一層級匹配,當找到匹配的server後就進入此serverlocation匹配。location的匹配並不完全按照它們在配置檔案**現的順序來匹配,請求uri會按如下規則跟server裡配置的location匹配。

尋找有沒有「=」等號引數完全匹配的location,如果有完全匹配的等號location則停止匹配,執行該location中的指令,不去匹配其它型別的location

匹配所有非正規表示式urilocation(包括=^~三種引數)。找到請求urilocation uri按字首匹配最長的location,如果這個最長的location的引數是^~,則停止匹配,執行該location中的指令,否則暫存該location

匹配正規表示式urilocation(包括~~*兩種引數),按location在配置檔案**現的順序匹配,如果找到第乙個匹配的locaiton則停止匹配,執行該location

匹配完所有正規表示式都沒有匹配的location,則執行第二步中暫存的最長字首匹配location

簡單來說按這個規則:

=>~^>~=~*>最長字首匹配>/

請求uri中問號後面的引數是不能在location中匹配到的,這些引數儲存在$query_string變數中,可以用if來判斷。

例如,對於引數中帶有單引號'進行匹配然後重定向到錯誤頁面。

/plus/list.php?tid=19&mid=1124'

if

( $query_string ~

*".*[;'<>].*"

)

這個很多解釋不太準確,有必要多說幾句。

對於請求uri結尾是否帶有/,一般的處理邏輯是帶/表示訪問目錄,不帶/表示訪問檔案,如果檔案不存在也會去匹配目錄。例如訪問,前面的請求會匹配目錄,後面的請求會先匹配檔案,檔案不存再匹配目錄

對於locatioin中的uri來說,如果uri的結尾帶有/,並且location要執行的命令式是proxy_passfastcgi_passuwsgi_passscgi_passmemcached_passgrpc_pass之一。

例如:

location  /images/

對於這種情況,nginx會做特殊處理,不管images命名的檔案或目錄存在不在,如果你訪問會被重定向到

所以如果你想這兩種請求對應不同的處理,就要明確增加不帶/結尾的location配置。

location  /images 

location /images/

帶有"@"location是用來定義乙個命名的location,這種location不參與請求匹配,一般用在內部定向。

例如用在error_page,try_files命令中。

它的功能類似於程式設計中的goto

location  /images 

location @name

location  =

/location /

location /documents/

location ^

~/images/

location ~*.

(gif|jpg|jpeg)$

請求uri例子:

/-> 匹配a/index.html-> 匹配b/documents/a.html-> 匹配c/images/1.gif-> 匹配d/documents/1.jpg-> 匹配e

(後續待補充)

一分鐘秒懂公有雲 私有雲 混合雲

近幾年隨著雲計算技術的逐漸普及,越來越多的企業開始選擇了部署雲計算方案,當運營賴於資料結構和網路管理業務時,雲計算的靈活性 易用性 定製性給企業帶來的優勢是毋庸置疑的,但是公有雲 私有雲 混合雲等等到底都是什麼呢?公有雲 私有雲 混合雲 這麼多雲怎麼區分?看到有個例子不錯,拿來大家分享一下 張三自己...

一分鐘秒懂公有雲 私有雲 混合雲

近幾年隨著雲計算技術的逐漸普及,越來越多的企業開始選擇了部署雲計算方案,當運營賴於資料結構和網路管理業務時,雲計算的靈活性 易用性 定製性給企業帶來的優勢是毋庸置疑的,但是公有雲 私有雲 混合雲等等到底都是什麼呢?公有雲 私有雲 混合雲 這麼多雲怎麼區分?看到有個例子不錯,拿來大家分享一下 張三自己...

新的3分鐘熱度?

tuesday march 21,2006 10 05am cst 昨晚和老溫學習了一下,突然覺得生物其實蠻有意思的。由乙個細胞就可以產生一整個活蹦亂跳的人,而且整個人身上任意乙個細胞都包含了同樣的資訊,可以再複製乙個人出來。30億個凳子排排坐出來的基因超級密碼決定了一切,有意思!14個月基因的研究...