欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx正反向代理與正則表達(dá)式詳解

 更新時間:2025年05月06日 09:48:53   作者:潘yi.  
Nginx作為一款高性能的開源Web服務(wù)器和反向代理工具,憑借其輕量級、高并發(fā)處理能力和靈活的模塊化設(shè)計,已成為現(xiàn)代Web架構(gòu)的基石,這篇文章主要介紹了Nginx正反向代理與正則表達(dá)式詳解,需要的朋友可以參考下

Nginx作為一款高性能的開源Web服務(wù)器和反向代理工具,憑借其輕量級、高并發(fā)處理能力和靈活的模塊化設(shè)計,已成為現(xiàn)代Web架構(gòu)的基石。從全球頂尖網(wǎng)站到微服務(wù)架構(gòu),Nginx在負(fù)載均衡、緩存加速、安全防護(hù)等場景中扮演著關(guān)鍵角色。

一:正向代理

正向代理(Forward Proxy)是一種位于客戶端和原始服務(wù)器之間的代理服務(wù)器,其主要作用是將客戶端的請求轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器,并將響應(yīng)返回給客戶端Nginx 的 正向代理 充當(dāng)客戶端的“中間人”,代表用戶訪問外部資源并隱藏真實 IP。它是企業(yè)內(nèi)網(wǎng)管控、安全審計與加速訪問的核心工具。用于場景一般是:

  • 內(nèi)網(wǎng)訪問空制:限制員工訪問特定網(wǎng)站
  • 匿名訪問:通過代理服務(wù)器隱藏用戶真實身份
  • 資源緩存加速:緩存公共資源,減少外網(wǎng)帶寬消耗

1.編譯安裝nginx

(1)安裝支持軟件

Nginx 的配置及運(yùn)行需要 pcre、zlib 等軟件包的支持,因此應(yīng)預(yù)先安裝這些軟件的開發(fā)包(devel),以便提供相應(yīng)的庫和頭文件,確保 Nginx 的安裝順利完成。

(2)創(chuàng)建運(yùn)行用戶,組和日志目錄

(3)編譯安裝nginx

參數(shù)說明:

  • --user=nginx    指定nginx運(yùn)行用戶
  • --group=nginx    指定nginx運(yùn)行組
  • --with-http _ssl module    支持https://
  • --with-http v2 module    支持http版本2
  • --with-http realip_module    支持ip透傳
  • --with-http stub status module   支持狀態(tài)頁面
  • --with-http_gzip_static module   支持壓縮
  • --with-pcre    支持正則
  • --with-stream      支持tcp反向代理
  • --with-stream ssl module     支持tcp的ssl加密
  • --with-stream realip module    支持tcp的透傳ip
  • --add-module=./ngx http proxy connect module #支持https轉(zhuǎn)發(fā)(默認(rèn)nginx不支持https轉(zhuǎn)發(fā),需要添加第三方模塊)

(2)驗證正向代理

用一臺新主機(jī),使用curl命令,并指定代理服務(wù)器進(jìn)行測試

二:反向代理

Nginx的七層(應(yīng)用層)反向代理基于 HTTP/HTTPS 協(xié)議,深度解析應(yīng)用層內(nèi)容(如 URL、Header、Cookie),將客戶端請求精準(zhǔn)轉(zhuǎn)發(fā)至后端服務(wù)器。作為企業(yè)級架構(gòu)的“智能調(diào)度器”,它實現(xiàn)了負(fù)載均衡、安全隔離與性能優(yōu)化的核心能力。應(yīng)用場景一般是:

  • 負(fù)載均衡:將流量分發(fā)至多臺后端服務(wù)器,避免單點故障。
  • 動靜分離:靜態(tài)資源(圖片、CSS/JS)由Nginx直接響應(yīng),動態(tài)請求(PHP、API)轉(zhuǎn)發(fā)至 Apache/Tomcat。
  • SSL 終端:統(tǒng)一處理 HTTPS 加密/解密,降低后端服務(wù)器計算壓力。
  • 灰度發(fā)布:根據(jù)請求特征(如IP、Header)將部分流量導(dǎo)向新版本服務(wù)。

Nginx的四層(網(wǎng)絡(luò)層)反向代理基于 TCP/UDP 協(xié)議,直接轉(zhuǎn)發(fā)原始數(shù)據(jù)流不解析應(yīng)用層內(nèi)容。它專為高性能、低延遲的傳輸層場景設(shè)計,是數(shù)據(jù)庫、游戲服務(wù)器等非 HTTP 服務(wù)的理想選擇。應(yīng)用場景一般是:

  • 數(shù)據(jù)庫代理:對外暴露統(tǒng)一端口,內(nèi)部轉(zhuǎn)發(fā)至 MySQL、Redis 集群。
  • 游戲服務(wù)器:代理 UDP 協(xié)議,實現(xiàn)實時數(shù)據(jù)包負(fù)載均衡
  • SSH 跳板機(jī):通過端口映射安全訪問內(nèi)網(wǎng)服務(wù)器
  • 高可用服務(wù):TCP服務(wù)(如 MQTT)的主備切換與健康檢查。

反向代理,指的是瀏覽器/客戶端并不知道自己要訪問具體哪臺目標(biāo)服務(wù)器只知道去訪問代理服務(wù)器 ,代理服務(wù)器再通過反向代理 +負(fù)載均衡實現(xiàn)請求分發(fā)到應(yīng)用服務(wù)器的一種代理服務(wù)。

反向代理服務(wù)的特點是代理服務(wù)器 代理的對象是應(yīng)用服務(wù)器,也就是對于瀏覽器/客戶端 來說應(yīng)用服務(wù)器是隱藏的。

操作系統(tǒng)配置ip服務(wù)
OpenEuler2C4G192.168.10.101Nginx
OpenEuler2C4G192.168.10.102Httpd

1.配置nginx七層代理

(1)環(huán)境安裝

192.168.102上操作:

(2)配置nginx七層代理轉(zhuǎn)發(fā)

192.168.10.101上操作:

上述配置中,使用upstream定義后端應(yīng)用服務(wù)器的地址池“backend”,在1ocation塊中,使用proxy_pass,轉(zhuǎn)發(fā)請求至后端地址池,proxyset headerHost $host:將請求中的Host頭部設(shè)置為客戶端請求的主機(jī)名,proxy_set header X-Real-IP $remote addr:將請求中的 X-Real-IP 頭部設(shè)置為客戶端的真實 IP 地址。

驗證轉(zhuǎn)發(fā)效果

2.配置nginx四層代理

192.168.10.101上操作:

(2)驗證四層代理

通過101的2222端口登陸后,實際登陸的是102的服務(wù)器

三:nginx 緩存

Nginx的緩存功能是其核心能力之一,主要用于加速內(nèi)容響應(yīng)和降低后端服務(wù)器負(fù)載。它的緩存功能主要基于反向代理(Proxy Cache),但也可用于其他場景(如 FastCGI 緩存)。以下是詳細(xì)解析:

1.緩存功能的核心原理和緩存類型

緩存類型作用場景
代理緩存反向代理模式下緩存后端服務(wù)器(如 Tomcat、Apache)的響應(yīng)內(nèi)容。
FastCGI 緩存緩存 PHP/Python 等通過 FastCGI 協(xié)議處理的動態(tài)內(nèi)容(需配FastCGI 緩存合 PHP-FPM 使用)。
uWSGI/SCGI 緩存似 FastCGI,用于其他后端協(xié)議。
靜態(tài)資源緩存通過 expires指令設(shè)置客戶端瀏覽器緩存(非服務(wù)端緩存)

代理緩存:

代理緩存原則:

第一步:客戶端第一次向Nginx請求數(shù)據(jù)A;

第二步:當(dāng)Nginx發(fā)現(xiàn)緩存中沒有數(shù)據(jù)A時,會向服務(wù)端請求數(shù)據(jù)A;

第三步:服務(wù)端接收到Nginx發(fā)來的請求,則返回數(shù)據(jù)A到Nginx,并且緩存在Nginx;

第四步:Nginx返回數(shù)據(jù)A給客戶端應(yīng)用;

第五步:客戶端第二次向Nginx請求數(shù)據(jù)A;

第六步:主當(dāng)Nginx發(fā)現(xiàn)緩存中存在數(shù)據(jù)A時,則不會請求服務(wù)端:

第七步:Nginx把緩存中的數(shù)據(jù)A返回給客戶端應(yīng)用。

2.代理緩存功能設(shè)置

因代理緩存功能需在反向代理模式下緩存后端服務(wù)器(如 Tomcat、Apache)的響應(yīng)內(nèi)容。需要先配置七層反向代理

(2)設(shè)置緩存能

進(jìn)入/usr/local/nginx/conf/nginx.conf 配置文件

(3)驗證緩存功能

四:nginx rewrite 和正則表達(dá)式

在云計算與分布式架構(gòu)的時代,Nginx憑借其高性能、高并發(fā)處理能力以及模塊化設(shè)計,已成為現(xiàn)代Web服務(wù)的核心組件之一。它不僅是負(fù)載均衡、反向代理的首選工具,更是實現(xiàn)流量調(diào)度、安全防護(hù)和動態(tài)路由的關(guān)鍵樞紐。而在這其中,Rewrite模塊作為Nginx的“規(guī)則引擎”,扮演著至關(guān)重要的角色--它賦子開發(fā)者精準(zhǔn)控制URL的能力,讓請求的流轉(zhuǎn)不再受限于物理路徑,而是通過邏輯規(guī)則靈活適配業(yè)務(wù)需求。

Rewrite的應(yīng)用場景:

路徑美化:將/product/123 轉(zhuǎn)換為/index.php?id=123

舊鏈接遷移:將過期URL永久重定向(301)到新地址

強(qiáng)制HTTPS/域名統(tǒng)一:自動跳轉(zhuǎn)http://到https://,或合并www與非www域

動態(tài)路由:適配單頁應(yīng)用(SPA)、RESTfu1API路由

灰度發(fā)布:按規(guī)則將部分流量導(dǎo)向新版本服務(wù)

1.Nginx正則

字符描述
^匹配輸入字符串的起始位置
$匹配輸入字符串的結(jié)束位置
*匹配前面的字符零次或多次。如“ol*"能匹配"o”及“ol”、“ol!”
+匹配前面的字符一次或多次。如“ol+”能匹配"o|"及“o|!”、“ol”,但不能匹配"o”
?匹配前面的字符零次或一次,例如“do(es)?"能匹配“do"或者“does","?"等效于”{0,1}”
.匹配除“n"之外的任何單個字符,若要匹配包括“"n"在內(nèi)的任意字符,請使用諸如“[.\n]”之類的模式
\將后面接著的字符標(biāo)記為一個特殊字符或一個原義字符或一個向后引用。如“\n"匹配一個換行符,而“S"則匹配“S”
\d匹配純數(shù)字
{n}重復(fù)n次
{n,}重復(fù)n次或更多次
{c}匹配單個字符c
{a-z}匹配 a-z 小寫字母的任意一個
{a-zA-Z}匹配 a-z 小寫字母或 A-Z 大寫字母的任意一個

2.nginx location

在學(xué)習(xí)rewrite前還要了解下location,因為rewrite 通常會與 location結(jié)合使用,但并非絕對。

二者的協(xié)作能實現(xiàn)更精細(xì)的路徑控制,location是Nginx中用于匹配請求URI(路徑:只能對域名后邊的除去傳遞的參數(shù)外的字符串起作用,例如 http://www.kgc.com/index.php?id=1 只匹配/index.php )的核心指令,用于根據(jù)請求路徑定義不同的處理邏輯(如靜態(tài)資源服務(wù)、反向代理、重定向等)

模式說明
llocation = /精確匹配:僅匹配完全相同的URI(優(yōu)先級最高)。
location ~正則匹配:區(qū)分大小寫的正則表達(dá)式匹配。
location ~*正則匹配:不區(qū)分大小寫的正則表達(dá)式匹配。
location ~~精確前綴匹配:匹配前綴路徑后,不再檢查正則匹配(優(yōu)先級高于正則)
location /通用匹配:默認(rèn)方式,優(yōu)先級最低,其他方式匹配不到時匹配

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

精確匹配 >精確前綴匹配 >正則匹配( 和~*同時存在時,文件中物理位置靠上的優(yōu)先)>普通前綴匹配 >通用匹配。

3.Rewrite 語法

regex:正則匹配URL字符串

只能對域名后邊的除去傳遞的參數(shù)外的字符串起regex:作用,例如 http://www.kgc.com/index.php?id=1 只對/index.php 重寫)

replacement:重寫跳轉(zhuǎn)后的地址

flag類型:

last:重寫后的 URI 會重新觸發(fā)location 匹配,并執(zhí)行新匹配到的location塊中的指令,是默認(rèn)類型

break:重寫后的 URI 不會重新匹配location,直接在當(dāng)前 location 中處理,且后續(xù)的rewrite 指令不再執(zhí)行

redirect:返回302臨時重定向,瀏覽器地址會顯示跳轉(zhuǎn)后的URL地址,爬蟲不會更新url(因為是臨時)

permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉(zhuǎn)后的URL地址:爬蟲更新url。

在實際工作的應(yīng)用中,Nginx跳轉(zhuǎn)需求有三種方式可實現(xiàn)。可以直接用rewrite 進(jìn)行匹配跳轉(zhuǎn),也可以使用 if 匹配全局變量后跳轉(zhuǎn)。另外,還可以使用location 匹配再跳轉(zhuǎn)。所以rewrite 只能放在 servert}、if{}、location{}配置段中:

server{} 塊中的 rewrite

執(zhí)行順序:在請求進(jìn)入server塊后、匹配location前執(zhí)行。

作用域:影響該server塊下所有請求(全局生效)。

location{} 塊中的rewrite

執(zhí)行順序:在請求匹配到該 location 后執(zhí)行。

作用域:僅對該 location 匹配的請求生效(局部生效)

if{} 塊中的 rewrite

執(zhí)行順序:在滿足 if 條件時觸發(fā)

作用域:依賴 if 表達(dá)式所在的上下文

(2)rewrite flag 驗證

配置完成后驗證

使用瀏覽器請求,發(fā)現(xiàn)內(nèi)容是 this is def  說明last 標(biāo)記后繼續(xù)向下匹配

將標(biāo)記改為break測試:

改為后,發(fā)現(xiàn)請求為找到頁面,說明使用break 后不繼續(xù)向下匹配

將標(biāo)記改為permanent 測試

該為permanent后,發(fā)現(xiàn)瀏覽器直接顯示跳轉(zhuǎn)后的地址

(3)rewrite 中的捕獲組

在 Nginx的 rewrite 指令中,小括號 ()用于定義正則表達(dá)式的捕獲組(Capture Group),捕獲的文本可以通過 $1,$2,$3 等變量在重寫后的 URI中引用

捕獲組“()”

在正則表達(dá)式中,(pattern)并捕獲內(nèi)容,按順序存會匹配 pattern 并捕獲內(nèi)容 ,按順序存入 $1 $2  $3 等變量中。

引用方式

在 rewrite 的替換字符中,通過 $1 表示第一個捕獲組,然后第二個,以此類推

測試訪問

(4)nginx中的set指令

在 Nginx 中,set 指令用于定義變量并賦值,這些變量可以用于后續(xù)的條件判斷、日志記錄、重寫規(guī)則等場景。它提供了靈活的動態(tài)配置能力,尤其在處理復(fù)雜的請求邏輯時非常有用。

測試訪問

到此這篇關(guān)于Nginx正反向代理與正則表達(dá)式的文章就介紹到這了,更多相關(guān)nginx正反向代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論