首頁  >  文章  >  運維  >  Nginx中location匹配及rewrite重寫跳轉的方法

Nginx中location匹配及rewrite重寫跳轉的方法

WBOY
WBOY轉載
2023-05-22 15:25:191698瀏覽

    一、rewrite跳轉實作

    Nginx:透過ngx_http_rewrite_module模組支援URL重寫、支援if條件判斷,但不支援else

    跳轉:從一個location跳到另一個location,循環最多可以執行10次,超過後nginx將回傳500錯誤

    PCRE支援:perl相容正規表示式的語法規則符合

    #重寫模組set指令:建立新的變數並為其賦值

    二、rewrite執行順序

    ①執行server快裡面的rewriter指令

    ②執行location匹配

    ③執行選定的location中的rewrite指令

    三、rewrite跳轉場景

    調整使用者瀏覽的URL,看起來更規範,合乎開發及產品人員的需求

    為了讓搜尋引擎搜尋網站內容及使用者體驗更好,企業會將動態URL位址偽裝成靜態位址提供服務

    網址換新網域後,讓舊的訪問跳到新的網域;例如,造訪京東的360buy.com 會跳到jd.com

    服務端某些業務調整,例如根據特殊變數、目錄、客戶端的資訊進行URL調整等

    四、語法與flg標記說明

    語法rewrite [flag];

    regex:表示正規符合規則

    replacement:表示跳轉後的內容

    flag:表示rewrite 支援的flag 標記

    flag標記說明:

    • ##last :本條規則配對完成後,繼續向下比對新的location URI規則,一般用在server 和if 中

    • break :本條規則比對完成即終止,不再符合後面的任何規則,一般使用在location 中

    • redirect :傳回302暫時重定向,瀏覽器位址會顯示跳轉後的URL位址

    • permanent :回傳301永久重定向,瀏覽器網址列會顯示跳轉後的URL位址

    五、Nginx常用的正規表示式符號 

    Nginx中location匹配及rewrite重寫跳轉的方法

    #六、location

    1.分類

    location大致可以分為以下三類:

    • 精準配對:location = / {…}

    • 一般符合:location / {…}

    • 正規比對:location ~ / {…}

    2.常用符合規則

    Nginx中location匹配及rewrite重寫跳轉的方法

    3.優先權

    • 首先精準符合=

    • 其次前綴符合^~

    • 其次是依檔案中順序的正規符合~ 或~*

    • #然後是匹配不帶任何修飾的前綴匹配,即一般匹配

    • 最後交給/ 通用匹配,優先級最低

     4.範例

     localtion = / {}

    =為精確匹配/,主機名稱後面不能帶任何字串,例如存取/ 和/xcf,則/ 匹配,/xcf 不匹配

    location / {}

    因為所有的位址都以/ 開頭,所以這條規則將匹配到所有的請求,例如存取/ 和/data,則/ 匹配,/data也符合

    但若後面是正規表示式,則會和最長字串優先(最長匹配)

    location /documents/ {}

    在匹配以/documents/ 開頭的位址後,需要繼續搜尋其他的location

    location /documents/abc {}

    符合任何以/documents/abc 開頭的位址,符合符合後,還要繼續往下搜尋其他location

    只有其他location 後面的正規表示式沒有符合到時,才會採用這一條

    location ^~ /images/ {}

    #符合任何以/images/ 開頭的位址,符合符合以後,停止往下搜尋正規則,並採用這條

    location ~* .(gif|jpg|jpeg)$ {}

    符合所有以gif、jpg、jpeg 為結尾的請求

    然而,所有請求/images/ 下的圖片會被location ^~ /images/ 處理,因為^~ 的優先級更高,所以到達不了這一正規

    location /images/abc {}

    最長字元符合到/images/abc,優先權最低,繼續往下搜尋其它location,會發現^~ 和~存在

    location ~ /images/abc {}

    匹配以/images/abc 開頭的,優先級次之,只有去掉location ^~ /images 才會採用這一

    location /images/abc/1.html {}

    匹配/images/abc/1.html 文件,如果和正規~ /images/abc/1.html 相比,正規優先順序更高

    優先權總結:

    (location = 完整路徑) > (location ^~ 路徑) > (location ,* 正規順序) > (location 部分起始路徑) > ;(location /)

    5.符合規則定義

    ①第一個必選規則:

    直接符合網站根,透過網域造訪網站首頁比較頻繁,使用這會加速處理,比如說官網

    可以是靜態首頁,也可以直接轉送後端「應用伺服器」——>PHP、Apache(應用程式伺服器如下圖所示)

    Nginx中location匹配及rewrite重寫跳轉的方法

    location / {
        root
        html;
        index
        index.html index.html;
    }

    ②第二個必選規則:

    處理靜態檔案請求,這是nginx作為http伺服器的強項(①靜態請求處理的能力②高並發處理能力③資源消耗較低)

    有兩種設定模式,目錄匹配或後綴匹配,任選其一或搭配使用

    location ^~ /static/ {
        root /webroot/static/;
    }
     
    location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {
        root /webroot/res/ ;
    }

    ③第三個必選規則:

    就是通用規則,例如用來轉發帶.php、.jsp後綴的動態請求到後端應用伺服器

    非靜態檔案請求就預設是動態請求(跳轉/反向代理)

    upstream tomcat_server {
    		192.168.126.12:80
    		192.168.126.23:80
    }
    location / {
        proxy_ pass http://tomcat_server;

    總結:

    1.比較rewrite和location

    相同點:都實作跳躍

    不同點:rewrite是在同一網域內更改取得資源的路徑

    location是對一類路徑做控制存取或反向代理,也可以proxy_pass到其他機器

    2.rewrite會寫在location裡,執行順序

    • 執行server區塊裡面的rewrite指令

    • 執行location符合

    • 執行選取的location中的rewrite指令

    3.location優先權是怎麼排列的?

    符合某個特定檔案

    (location = 完整路徑) > (location ^~ 完整路徑) > (location ~* 完整路徑) > (location ~ 完整路徑)> (location /)

    用目錄做匹配訪問某個檔案

    (location = 目錄) > (location ^~ 目錄) > (location ~ 目錄) > (location ~* 目錄)> (location /)

    4.檔案、目錄為何只會在區不區分大小寫上會有變動

    正規表達式:目的是為了盡量精確的匹配

    文件——>盡量精確匹配,區分大小寫精確,不區分更為精確

    目錄——>盡量精確匹配,區分大小寫更為精確,優先權更高

    以上是Nginx中location匹配及rewrite重寫跳轉的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除