溫馨提示×

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

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

Nginx Rewrite模塊(內(nèi)含Nginx模塊概述)———理論篇

發(fā)布時(shí)間:2020-06-17 00:14:05 來(lái)源:網(wǎng)絡(luò) 閱讀:344 作者:wx5d3faba330584 欄目:系統(tǒng)運(yùn)維

Rewrite跳轉(zhuǎn)場(chǎng)景

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

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

Nginx Rewrite模塊(內(nèi)含Nginx模塊概述)———理論篇

Rewrite實(shí)用場(chǎng)景

1、Nginx跳轉(zhuǎn)需求的實(shí)現(xiàn)方式
     使用rewrite進(jìn)行匹配跳轉(zhuǎn)
     使用if匹配全局變量后跳轉(zhuǎn)
     使用location匹配再跳轉(zhuǎn)
2、rewrite放在server{},if{},location{}段中
3、對(duì)域名或參數(shù)字符串
     使用if全局變量匹配
     使用proxy_pass反向代理

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

Nginx Rewrite模塊(內(nèi)含Nginx模塊概述)———理論篇

Rewrite命令

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

flag標(biāo)記說(shuō)明:
Nginx Rewrite模塊(內(nèi)含Nginx模塊概述)———理論篇
last和break比較:
Nginx Rewrite模塊(內(nèi)含Nginx模塊概述)———理論篇

location分類(lèi)

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

正則匹配的常用表達(dá)式:
Nginx Rewrite模塊(內(nèi)含Nginx模塊概述)———理論篇

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

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

比較rewrite和location

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

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

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

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

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

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

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

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

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

##以/images/abc開(kāi)頭的,優(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 /)
用目錄做匹配訪問(wèn)某個(gè)文件:
(location = 目錄)>(location ^~目錄/)>(location ~ 目錄)>(location ~ 目錄)>(location 目錄)>(location /)

Nginx模塊

Nginx Rewrite模塊(內(nèi)含Nginx模塊概述)———理論篇

1,Nginx 工作原理

Nginx 由內(nèi)核和模塊組成。
?       Nginx 本身做的工作實(shí)際很少,當(dāng)它接到一個(gè) HTTP 請(qǐng)求時(shí), 它僅僅是通過(guò)查找配置文件將此次請(qǐng)求映射到一個(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é)處理請(qǐng)求,完成響應(yīng)內(nèi)容的生成,而 filter 模塊對(duì)響應(yīng)內(nèi)容進(jìn)行處理。 用戶根據(jù)自己的需要所開(kāi)發(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 的模塊從功能上分為如下三類(lèi):
?       Handlers(處理器模塊):此類(lèi)模塊直接處理請(qǐng)求,并進(jìn)行輸出內(nèi)容和修改 headers 信息等操作。Handlers 處理器模塊一般只能有一個(gè); Filters(過(guò)濾器模塊):此類(lèi)模塊主要對(duì)其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作,最后由 Nginx 輸出; Proxies(代理類(lèi)模塊):此類(lèi)模塊是 Nginx 的 HTTP Upstream 之類(lèi)的模塊,這些模塊主要與后端一些服務(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)程主要用來(lái)管理 worker 進(jìn)程,主要包含:接收來(lái)自外界的信號(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í)對(duì)進(jìn)程進(jìn)行監(jiān)護(hù)。它不需要處理網(wǎng)絡(luò)事件,不負(fù)責(zé)業(yè)務(wù)的執(zhí)行,只會(huì)通過(guò)管理worker 進(jìn)程來(lái)實(shí)現(xiàn)重啟服務(wù)、平滑升級(jí)、更換日志文件、配置文件實(shí)時(shí)生效等功能。 

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

            Nginx 不支持對(duì)外部程序的直接調(diào)用或者解析,所有的外部程序(包括 PHP)必須通過(guò)FastCGI 接口來(lái)調(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 請(qǐng)求發(fā)送給這個(gè) socket 的時(shí)候,通過(guò) FastCGI 接口,wrapper 接收到請(qǐng)求,然后 Fork(派生)出一個(gè)新的線程,這個(gè)線程調(diào)用解釋器或者外部程序處理腳本并讀取返回?cái)?shù)據(jù);接著 wrapper 再將返回的數(shù)據(jù)通過(guò) FastCGI 接口,沿著固定的 socket傳遞給 Nginx;最后 Nginx 將返回的數(shù)據(jù)(html 頁(yè)面或者圖片)發(fā)送給客戶端。
向AI問(wèn)一下細(xì)節(jié)

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

AI