linux nginx的location詳解


nginx 的 location

Nginx中location的作用是根據Url來決定怎么處理用戶請求(轉發請求給其他服務器處理或者查找本地文件進行處理)。location支持正則表達式,配置十分靈活。我們可以在一個虛擬主機(nginx中的一個server節點)下配置多個location以滿足如動靜分離,防盜鏈等需求。

使用Nginx Location可以控制訪問網站的路徑, 但一個server可以有多個location配置, 多個location的優先級該如何區分。

location語法:location [=|~|~*|^~]  /uri/ {… },具體解釋如下表:
符號 含義
location = /url = :開頭,表示精確匹配,uri必須完全一致才能匹配成功
location ^~ /Purl ^~:Puri和請求url的開頭相同就匹配成功,且不再去匹配正則,也屬於普通匹配
location /Purl 普通匹配,Purl和用戶請求url的開頭相同就匹配成功,如果有多個普通匹配都匹配成功則按最長的 。  如有location /static/,和oaction /static/img/ 當請求是www.mysite.com/static/img/1.jpg時,第二個location匹配的更長,所以和第二個loaction匹配成功。
location ~ reg ~ :區分大小寫的正則匹配
location ~* reg ~* :不區分大小寫的正則匹配
匹配符 匹配規則 優先級
= 精確匹配 1
^~ 以某個字符串開頭 2
~ 區分大小寫的正則匹配 3
~* 不區分大小寫的正則匹配 3
/ 通用匹配,任何請求都會匹配到 4

location案例

通過location案例運用到匹配符來判斷優先級。

server {
    listen 80;
    server_name _;
	
	不區分大小寫的正則匹配
    location ~* /python {
        default_type text/html;   # 指定類型
        return 200 "Location ~*";  # 返回狀態碼為200打印location ~*
    }
	
	區分大小寫的正則匹配
    location ~ /Python {
        default_type text/html;
        return 200 "Location ~";
    }
	以某個字符串開頭
    location ^~ /python {
        default_type text/html;
        return 200 "Location ^~";
    }
	
	精確匹配
    location = /python {
        default_type text/html;
        return 200 "Location =";
    }
    

**這里優先級最高的就為 = **

如果把精准匹配 = 注釋掉我們再來看一下這個優先級的變化。

**這里就可以看出來優先級的變化為 ^~ **

最后再來測試一下同級別的 ~ 與 ~*  : 通過兩張圖來驗證一下

通過上圖可以發現 在同級別的(~) 與 (~*) 中 location的讀取順序是從上到下依次執行的 所以在上方的優先級大於下方的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM