溫馨提示×

溫馨提示×

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

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

什么是Nginx Rewrite模塊

發(fā)布時(shí)間:2021-09-26 18:01:43 來源:億速云 閱讀:177 作者:柒染 欄目:系統(tǒng)運(yùn)維

今天就跟大家聊聊有關(guān)什么是Nginx Rewrite模塊,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Rewrite跳轉(zhuǎn)場景

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

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

什么是Nginx Rewrite模塊

Rewrite實(shí)用場景

  • Nginx跳轉(zhuǎn)需求的實(shí)現(xiàn)方式
    使用rewrite進(jìn)行匹配跳轉(zhuǎn)
    使用if匹配全局變量后跳轉(zhuǎn)
    使用location匹配再跳轉(zhuǎn)

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

  • 對域名或參數(shù)字符串
    使用if全局變量匹配
    使用proxy_pass反向代理

常用的正則表達(dá)式元字符

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

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臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址,爬蟲不會(huì)更新url
permanent返回301永久重定向,瀏覽器地址欄會(huì)顯示跳轉(zhuǎn)后的URL地址,爬蟲更新url

last和break比較:


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

location分類

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

正則匹配的常用表達(dá)式:

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

location優(yōu)先級(jí)

**相同類型的表達(dá)式,字符創(chuàng)長的會(huì)優(yōu)先匹配**
**按優(yōu)先級(jí)排列**
    = 類型
    ^~ 類型表達(dá)式
    正則表達(dá)式(~和~*)類型
    常規(guī)字符串匹配類型,按前綴匹配
    通常匹配(/),如果沒有其他匹配,任何請求都會(huì)匹配到

比較rewrite和location

**相同點(diǎn)**
        都能實(shí)現(xiàn)跳轉(zhuǎn)
**不同點(diǎn)**
        rewrite是在同一域名內(nèi)更改獲取資源的路徑
        location是對一類路徑做控制訪問或方向代理,還可以proxy_pass到其他機(jī)器
**rewrite會(huì)寫在location里執(zhí)行順序**
        執(zhí)行server塊里面的rewrite指令
        執(zhí)行l(wèi)ocation匹配
        執(zhí)行選定的location中的rewrite指令

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

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

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

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

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

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

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

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

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

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

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

匹配某個(gè)具體文件:
(location = 完整路徑)>(location ^~完整路徑)>(location ~完整路徑)>(location ~完整路徑)>(location 完整路徑)>(location /)
用目錄做匹配訪問某個(gè)文件:
(location = 目錄)>(location ^~目錄/)>(location ~ 目錄)>(location ~
目錄)>(location 目錄)>(location /)

Nginx模塊

什么是Nginx Rewrite模塊

1,Nginx 工作原理

Nginx 由內(nèi)核和模塊組成。
?Nginx 本身做的工作實(shí)際很少,當(dāng)它接到一個(gè) HTTP 請求時(shí), 它僅僅是通過查找配置文件將此次請求映射到一個(gè) location block,而此 location 中所配 置的各個(gè)指令則會(huì)啟動(dòng)不同的模塊去完成工作,因此模塊可以看做 Nginx 真正的勞動(dòng)工作者。

?通常一個(gè) location 中的指令會(huì)涉及一個(gè) handler 模塊和多個(gè) filter 模塊(當(dāng)然,多個(gè) location 可以復(fù)用同一個(gè)模塊)。handler 模塊負(fù)責(zé)處理請求,完成響應(yīng)內(nèi)容的生成,而 filter 模塊對響應(yīng)內(nèi)容進(jìn)行處理。 用戶根據(jù)自己的需要所開發(fā)的模塊都屬于第三方模塊。正是有了這么多模塊的支撐, Nginx 的功能才會(huì)如此強(qiáng)大。
Nginx 的模塊從結(jié)構(gòu)上分為核心模塊、基礎(chǔ)模塊和第三方模塊
核心模塊:HTTP 模塊、EVENT 模塊和 MAIL 模塊;
基礎(chǔ)模塊:HTTP Access 模塊、HTTP FastCGI 模塊、HTTP Proxy 模塊和 HTTP Rewrite 模塊;
第三方模塊:HTTP Upstream Request Hash 模塊、Notice 模塊和 HTTP Access Key 模 塊。
Nginx 的模塊從功能上分為如下三類:
? Handlers(處理器模塊):此類模塊直接處理請求,并進(jìn)行輸出內(nèi)容和修改 headers 信息等操作。Handlers 處理器模塊一般只能有一個(gè); Filters(過濾器模塊):此類模塊主要對其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作,最后由 Nginx 輸出; Proxies(代理類模塊):此類模塊是 Nginx 的 HTTP Upstream 之類的模塊,這些模塊主要與后端一些服務(wù)比如 FastCGI 等進(jìn)行交互,實(shí)現(xiàn)服務(wù)代理和負(fù)載均衡等功能。

2. Nginx 的進(jìn)程模型 在工作方式上,Nginx 分為單工作進(jìn)程和多工作進(jìn)程兩種模式。

?在單工作進(jìn)程模式下,除主進(jìn)程外,還有一個(gè)工作進(jìn)程,工作進(jìn)程是單線程的;
?在多工作進(jìn)程模式下,每個(gè)工作進(jìn)程包含多個(gè)線程。Nginx 默認(rèn)為單工作進(jìn)程模式。

?Nginx 在啟動(dòng)后,會(huì)有一個(gè) master 進(jìn)程和多個(gè) worker 進(jìn)程。
?master 進(jìn)程主要用來管理 worker 進(jìn)程,主要包含:接收來自外界的信號(hào),向各 worker 進(jìn)程發(fā)送信號(hào),監(jiān)控 worker 進(jìn)程的運(yùn)行狀態(tài),當(dāng) worker 進(jìn)程退出后(異常情況下),會(huì)自動(dòng) 重新啟動(dòng)新的 worker 進(jìn)程。 master 進(jìn)程充當(dāng)整個(gè)進(jìn)程組與用戶的交互接口,同時(shí)對進(jìn)程進(jìn)行監(jiān)護(hù)。它不需要處理網(wǎng)絡(luò)事件,不負(fù)責(zé)業(yè)務(wù)的執(zhí)行,只會(huì)通過管理worker 進(jìn)程來實(shí)現(xiàn)重啟服務(wù)、平滑升級(jí)、更換日志文件、配置文件實(shí)時(shí)生效等功能。

3.Nginx+FastCGI運(yùn)行原理

?Nginx 不支持對外部程序的直接調(diào)用或者解析,所有的外部程序(包括 PHP)必須通過FastCGI 接口來調(diào)用。FastCGI 接口在 Linux 下是 socket(這個(gè) socket 可以是文件 socket, 也可以是 ip socket)。 wrapper 為了調(diào)用 CGI 程序,還需要一個(gè) FastCGI 的 wrapper(wrapper 可以理解為用于啟動(dòng)另一個(gè)程序的程序),這個(gè) wrapper 綁定在某個(gè)固定 socket 上,如端口或者文件 socket。當(dāng) Nginx 將 CGI 請求發(fā)送給這個(gè) socket 的時(shí)候,通過 FastCGI 接口,wrapper 接收到請求,然后 Fork(派生)出一個(gè)新的線程,這個(gè)線程調(diào)用解釋器或者外部程序處理腳本并讀取返回?cái)?shù)據(jù);接著 wrapper 再將返回的數(shù)據(jù)通過 FastCGI 接口,沿著固定的 socket傳遞給 Nginx;最后 Nginx 將返回的數(shù)據(jù)(html 頁面或者圖片)發(fā)送給客戶端。

看完上述內(nèi)容,你們對什么是Nginx Rewrite模塊有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

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

AI