溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nginx服務(wù)的rewrite模塊(理論詳解)

發(fā)布時間:2020-05-29 04:22:03 來源:網(wǎng)絡(luò) 閱讀:848 作者:wx5d2c2d660c282 欄目:系統(tǒng)運維

Rewrite跳轉(zhuǎn)場景

  • URL看起來更規(guī)范,合理;
  • 企業(yè)會將動態(tài)URL地址偽裝成靜態(tài)地址提供服務(wù);
  • 網(wǎng)址換新域名后,讓舊的訪問跳轉(zhuǎn)到新的域名上;
  • 服務(wù)端某些業(yè)務(wù)調(diào)整。

Rewrite跳轉(zhuǎn)實現(xiàn)

Nginx服務(wù)的rewrite模塊(理論詳解)

Rewrite實用場景

Nginx跳轉(zhuǎn)需求的實現(xiàn)方式

  • 使用rewrite進行匹配跳轉(zhuǎn)
  • 使用if匹配全局變量后跳轉(zhuǎn)
  • 使用location匹配再跳轉(zhuǎn)

rewrite放在server{},if{},location{}段中

對域名或參數(shù)字符串

  • 使用if全局變量匹配
  • 使用proxy_pass反向代理

常用的正則表達式元字符

字符 說明
^ 匹配輸入字符串的起始位置
$ 匹配輸入字符串的結(jié)束位置
* 匹配前面的字符零次或多次
+ 匹配前面的字符一次或多次
? 匹配前面的字符零次或一次
. 匹配除\n之外的任何單個字符,使用諸如"[.\n]"之類的模式,可匹配包括"\n"在內(nèi)的任意字符
\d 匹配純數(shù)字 [0-9]
{n} 重復(fù)多次
{n,} 重復(fù)n次或更多次
[c] 匹配單個字符c
[a-z] 匹配a-z小寫字母的任意一個
[a-zA-Z] ] 匹配a-z小寫字母或A-Z大寫字母的任意一個

Rewrite命令

語法:

rewrite <regex>            <replacement>             [flag];
           正則                  跳轉(zhuǎn)后的內(nèi)容               rewrite支持的flag標(biāo)記

flag標(biāo)記說明

標(biāo)記 說明
last 相當(dāng)于Apache的[L]標(biāo)記,表示完成rewrite
break 本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則
redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉(zhuǎn)后的URL地址,爬蟲不會更新url
permanent 返回301永久重定向,瀏覽器地址欄會顯示跳轉(zhuǎn)后的URL地址,爬蟲更新url

last和break比較

last break
使用場景 一般寫在server和if中 一般使用在location中
URL匹配 不終止重寫后的url匹配 終止重寫后的url匹配

location分類

location = patt {} [精準(zhǔn)匹配]
location patt {} [一般匹配]
location ~ patt {} [正則匹配]

正則匹配的常用表達式

標(biāo)記 說明
~ 執(zhí)行一個正則匹配,區(qū)分大小寫
~* 執(zhí)行一個正則匹配,不區(qū)分大小寫
!~ 執(zhí)行一個正則匹配,區(qū)分大小寫不匹配
!~* 執(zhí)行一個正則匹配,不區(qū)分大小寫不匹配
^~ 普通字符匹配;使用前綴匹配。如果匹配成功,則不再匹配其他location
= 普通字符精準(zhǔn)匹配。也就是完全匹配
@ 定義一個命名的location,使用在內(nèi)部定向時

location優(yōu)先級

相同類型的表達式,字符創(chuàng)長的會優(yōu)先匹配
按優(yōu)先級排列

  • = 類型
  • ^~ 類型表達式
  • 正則表達式(~和~*)類型
  • 常規(guī)字符串匹配類型,按前綴匹配
  • 通常匹配(/),如果沒有其他匹配,任何請求都會匹配到

比較rewrite和location

相同點
都能實現(xiàn)跳轉(zhuǎn)
不同點

  • rewrite是在同一域名內(nèi)更改獲取資源的路徑
  • location是對一類路徑做控制訪問或方向代理,還可以proxy_pass到其他機器
    rewrite會寫在location里執(zhí)行順序
  • 執(zhí)行server塊里面的rewrite指令
  • 執(zhí)行l(wèi)ocation匹配
  • 執(zhí)行選定的location中的rewrite指令

location優(yōu)先級的示例

##精確匹配/,主機名后面不能帶任何字符串
location = / {
[ configuration A ]     
}

##所有的地址都以/開頭,這條規(guī)則將匹配到所有請求,但正則和最長字符串會優(yōu)先匹配
location  / {
[ configuration B ]     
}

##匹配任何以/documents/開頭的地址,當(dāng)后面正則表達式?jīng)]有匹配到時,才起作用
location /documents/ {
[ configuration C ]
}

##匹配任何以/documents/abc開頭的地址,當(dāng)后面正則表達式?jīng)]有匹配到時,才會起作用
location ~ /documents/abc {
[ configuration D ]
}

##以/images/開頭的地址,匹配符合后,停止往下匹配
location ^~ /images/ {
[ configuration E ]
}

##匹配所有以gif結(jié)尾的請求,/images/下的圖片會被[configuration E]處理,因為^~的優(yōu)先級更高
location ~* \.(gif|jpg|jpeg)$ {
[ configuration F ]
}

##最長字符匹配到/images/abc,優(yōu)先級最低
location /images/abc {
[ configuration G ]
}

##以/images/abc開頭的,優(yōu)先級次之
location ~ /images/abc {
[ configuration H ]
}

##如果和正則~/images/abc/1.html相比,正則優(yōu)先級更高
location /images/abc/1.html {
[ configuration I ]
}

location優(yōu)先級規(guī)則

匹配某個具體文件

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

用目錄做匹配訪問某個文件

(location=目錄) > (location ^~目錄/) > (location~目錄)>
(location ~*目錄) > (location 目錄) > (location /)
向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI