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

Nginx的核心功能--正向代理、反向代理、緩存和Rewrite

 更新時(shí)間:2025年05月02日 15:32:09   作者:我愛哇哈哈  
Nginx作為一款高性能的開源Web服務(wù)器和反向代理工具,在負(fù)載均衡、緩存加速、安全防護(hù)等場(chǎng)景中扮演著關(guān)鍵角色,本文聚焦Nginx的四大核心功能--反向代理(七層/四層)、正向代理、緩存機(jī)制和正則表達(dá)式匹配,通過理論解析與場(chǎng)景化案例,深入掌握其設(shè)計(jì)思想與實(shí)踐技巧

Nginx作為一款高性能的開源Web服務(wù)器和反向代理工具,憑借其輕量級(jí)、高并發(fā)處理能力和靈活的模塊化設(shè)計(jì),已成為現(xiàn)代Web架構(gòu)的基石。從全球頂尖網(wǎng)站到微服務(wù)架構(gòu),Nginx在負(fù)載均衡、緩存加速、安全防護(hù)等場(chǎng)景中扮演著關(guān)鍵角色。本文聚焦Nginx的四大核心功能--反向代理(七層/四層)、正向代理、緩存機(jī)制和正則表達(dá)式匹配,通過理論解析與場(chǎng)景化案例,深入掌握其設(shè)計(jì)思想與實(shí)踐技巧,為構(gòu)建高效、穩(wěn)定的Web服務(wù)莫定堅(jiān)實(shí)基礎(chǔ)。

一、正向代理

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

內(nèi)網(wǎng)訪問控制:限制員工訪問特定網(wǎng)站(如社交媒體)

匿名訪問:通過代理服務(wù)器隱藏用戶真實(shí)身份。

資源緩存加速:緩存公共資源(如軟件包、鏡像文件),減少外網(wǎng)帶寬消耗。

Nginx的核心功能(2)_nginx

1.編譯安裝Nginx

(1)安裝支持軟件

Nginx 安裝文件可以從官方網(wǎng)站 http://www.nginx.org/下載。

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

[root@localhost ~]# dnf -y install gcc* pcre-devel zlib-devel openssl-devel

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

Nginx 服務(wù)程序默認(rèn)以 nobody 身份運(yùn)行,建議為其創(chuàng)建專門的用戶賬號(hào),以便更準(zhǔn)確地控制其訪問權(quán)限,增加靈活性、降低安全風(fēng)險(xiǎn)。例如,創(chuàng)建一個(gè)名為nginx 的用戶,不建立宿主文件夾,也禁止登錄到She11 環(huán)境。

[root@localhost ~]# useradd -M-s /sbin/nologin nginx
[root@localhost ~]# mkdir -p /var/log/nginx
[root@localhost ~]# chown-R nginx:nginx /var/log/nginx

(3)編譯安裝 Nginx

配置Nginx的編譯選項(xiàng)時(shí),將安裝目錄設(shè)為/usr/local/nginx,運(yùn)行用戶和組均設(shè)為nginx:啟用 http_stub_status module 模塊以支持狀態(tài)統(tǒng)計(jì),便于查看服務(wù)器的連接信息。具體選項(xiàng)根據(jù)實(shí)際需要來定,配置前可參考“./configure--help”給出的說明。

[root@localhost ~]# tar zxf nginx-1.26.3_http_proxy.tar.gz  
[root@localhost ~]# cd nginx-1.26.3
[root@localhost ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx  --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --with-http_gzip_static_module --add-module=./ngx_http_proxy_connect_module

--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透?jìng)?/p>

--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的透?jìng)鱥p

--add-module=./ngx http_proxy_connect_module:支持https轉(zhuǎn)發(fā)(默認(rèn)nginx不支持https轉(zhuǎn)發(fā),需要添加第三方模塊)

為了使 Nginx 服務(wù)器的運(yùn)行更加方便,可以為主程序 nginx 創(chuàng)建鏈接文件,以便管理員直接執(zhí)行“nginx”命令就可以調(diào)用 Nginx 的主程序。

[root@localhost nginx-1.26.3]# ln-s /usr/local/nginx/sbin/nginx /usr/local/sbin/

(4)添加Nginx系統(tǒng)服務(wù)

為了使 Nginx 服務(wù)的啟動(dòng)、停止、重載等操作更加方便,可以編寫 Nginx 服務(wù)腳本,并使用 chkconfig 和 systemct1 工具來進(jìn)行管理。

[root@localhost ~]# vi /lib/systemd/system/nginx.service  
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/sbin/nginx
ExecReload=/usr/local/sbin/nginx-s reload
ExecStop=/usr/local/sbin/nginx -s stop

[Instal1]
WantedBy=multi-user.target
[root@localhost ~]# systemctl  daemon-reload
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl enable nginx

2.配置正向代理

(1)編輯主配置文件添加正向代理相關(guān)配置:

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf

server {

        listen       8080;						#代理監(jiān)聽端口

        resolver 114.114.114.114 8.8.8.8;			#解析域名使用的DNS    #多個(gè)DNS用空格分隔

        proxy_connect;					#啟用代理CONNECT方法(支持HTTPS)

        proxy_connect_allow 80 443;						#允許代理到80和443端口

        proxy_connect_connect_timeout 10s;

        proxy_connect_read_timeout 10s;

       proxy_connect_send_timeout 10s;
  
#處理HTTP/HTTPS請(qǐng)求
location / {
        proxy_pass $scheme://$http_host$request_uri;			#動(dòng)態(tài)協(xié)議

        proxy_set_header Host $http_host;

  			#優(yōu)化緩沖區(qū)
        proxy_buffers 256 4k;						
        proxy_max_temp_file_size 0;

  			#保持連接
        proxy_http_version 1.1;				
        proxy_set_header Connection "";

  }
[root@localhost ~]#  nginx -t
[root@localhost ~]#  nginx -s reload

(2)驗(yàn)證正向代理:

Windows中驗(yàn)證,使用火狐瀏覽器,設(shè)置http和https代理即可:

Nginx的核心功能(2)_Nginx_02

Linux中驗(yàn)證,使用curl命令,并指定代理服務(wù)器進(jìn)行訪問測(cè)試

[root@localhost ~]# curl -x http://192.168.10.101:8080 www.baidu.com

在101上查看日志

[root@localhost ~]# cat /usr/local/nginx/logs/access.log

Nginx的核心功能(2)_nginx_03

二、反向代理

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

負(fù)載均衡:將流量分發(fā)至多臺(tái)后端服務(wù)器,避免單點(diǎn)故障。

動(dòng)靜分離:靜態(tài)資源(圖片、CSS/JS)由 Nginx 直接響應(yīng),動(dòng)態(tài)請(qǐng)求(PHP、API)轉(zhuǎn)發(fā)至Apache/Tomcat.

SSL 終端:統(tǒng)一處理 HTTPS 加密/解密,降低后端服務(wù)器計(jì)算壓力。

灰度發(fā)布:根據(jù)請(qǐng)求特征(如IP、Header)將部分流量導(dǎo)向新版本服務(wù)。

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

數(shù)據(jù)庫代理:對(duì)外暴露統(tǒng)一端口,內(nèi)部轉(zhuǎn)發(fā)至 MySQL、Redis 集群,

游戲服務(wù)器:代理 UDP 協(xié)議,實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)包負(fù)載均衡。

SSH 跳板機(jī):通過端口映射安全訪問內(nèi)網(wǎng)服務(wù)器。

高可用服務(wù):TCP 服務(wù)(如 MQTT)的主備切換與健康檢查

Nginx的核心功能(2)_Nginx_04

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

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

資源清單

本實(shí)驗(yàn)需要兩臺(tái)主機(jī)

操作系統(tǒng)

配置

IP

服務(wù)

OpenEuler

2C4G

192.168.10.101

Nginx

OpenEuler

2C4G

192.168.10.102

Httpd

1.配置nginx七層代理

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

192.168.10.102上操作:

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# dnf -y install httpd
[root@localhost ~]# echo "這是后端主機(jī)" >/var/www/html/index.html
[root@localhost ~]# systemctl start httpd

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

192.168.10.101上的操作:

[root@localhost ]# vi /usr/local/nginx/conf/nginx.conf
http {
			upstream backend          #    后端地址池設(shè)置
			server 192.168.10.102:80;        #后端主機(jī)設(shè)置
server {
					listen 80;
					server name example.com;
			location / {
							proxy_pass http://backend;			#請(qǐng)求轉(zhuǎn)發(fā)
        			proxy set header Host $host :
							proxy set header X-Real-IP $remote addr;
			  }
  	}
}

[root@localhost]# nginx -t
[root@localhost]# nginx -s reload

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

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

Nginx的核心功能(2)_Nginx_05

2.配置nginx四層代理

SSH協(xié)議是基于TCP協(xié)議的,配置nginx的四層代理,實(shí)現(xiàn)代理ssh請(qǐng)求后至后端服務(wù)器,可以登錄內(nèi)網(wǎng)服務(wù)器場(chǎng)景

(1)配置四層代理

192.168.10.101上操作:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

stream {
        upstream ssh_cluster {				#定義后端地址池
        server 192.168.10.102:22;					#設(shè)置后端地址和服務(wù)端口
        }

        server {
                listen 2222;
                proxy_pass ssh_cluster;
                proxy_connect_timeout 5s;			#連接超時(shí)時(shí)間
                proxy_timeout 1h;						#長連接保持時(shí)間
        }
}

注意: stream需要與http{  }模塊平級(jí),不能在http{   }中嵌套

Nginx的核心功能(2)_nginx_06

(2)驗(yàn)證四層代理

Nginx的核心功能(2)_nginx_07

通過上面的驗(yàn)證發(fā)現(xiàn),通過102的2222端口登錄后,實(shí)際上是登錄到101服務(wù)器。

三、Nginx緩存

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

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

緩存類型

作用場(chǎng)景

代理類型

反向代理模式下緩存后端服務(wù)器(如 Tomcat、Apache)的響應(yīng)內(nèi)容。

FastCGI 緩存

緩存 PHP/Python 等通過 FastCGl 協(xié)議處理的動(dòng)態(tài)內(nèi)容(需配合 PHP-FPM使用)。

uWSGI/SCGI緩存

類似 FastCG,用于其他后端協(xié)議。

靜態(tài)資源緩存

通過 expires 指令設(shè)置客戶端瀏覽器緩存(非服務(wù)端緩存)。

代理緩存原理:

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

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

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

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

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

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

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

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

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

需要先配置七層反向代理

(1)反向代理配置

[root@localhost ]# vi /usr/local/nginx/conf/nginx.conf

http {
  	upstream backend          #    后端地址池設(shè)置
  	server 192.168.10.102:80;        #后端主機(jī)設(shè)置

server {
    	listen 80;
    	server name example.com;

  	location / {
      	proxy_pass http://backend;  	#請(qǐng)求轉(zhuǎn)發(fā)
        proxy set header Host $host :
      	proxy set header X-Real-IP $remote addr;
     }
  	}
}


[root@localhost]# nginx -t
[root@localhost]# nginx -s reloa

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

[root@localhost ~]# mkdir -p /data/nginx/cache

[root@localhost ~]# chown nginx:nginx /data/nginx/cache -R

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
http {
	# 定義緩存路徑和參數(shù)
	proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g use_temp_path=off;

  server {
		listen 80:
		server_name_example.com;
    
	location / {
			proxy_pass http://backend;
    
      #啟用緩存區(qū)
			proxy_cache my_cache;
    
				#定義緩存鍵(URL +請(qǐng)求方法 +協(xié)議)
    		proxy_cache_key "$scheme$request_method$host$request_uri";

    	#緩存有效期(不同狀態(tài)碼不同時(shí)間)
				proxy_cache_valid 200 302 10m;			#200/302 狀態(tài)碼緩存10分鐘
    		proxy_cache_valid 404		1m; 						#404 緩存1分鐘
				
    		proxy_cache_valid any   5s;			#其他狀態(tài)碼緩存5秒

    		#添加緩存狀態(tài)頭(調(diào)試用)
				add_header X-Cache-Status $upstream_cache_status;
    }
  }
}

關(guān)鍵配置解析:

proxy_cache path:定義緩存文件的存儲(chǔ)路徑

levels=1:2:定義緩存目錄的層級(jí)結(jié)構(gòu),1eve1s=N:M,表示緩存文件路徑的層級(jí)深度,

keys zone=my cache:10m :定義共享內(nèi)存區(qū)域,用于存儲(chǔ)緩存鍵(key)和元數(shù)據(jù)(如過期時(shí)間),10m:共享內(nèi)存區(qū)大小(通常每1MB 可存儲(chǔ)約 8000 個(gè)鍵)

inactive=60m :定義緩存內(nèi)容的閑置有效期。60分鐘 內(nèi)未被訪問,將被自動(dòng)刪除

max size=1g:定義緩存目錄的最大磁盤空間。當(dāng)緩存量達(dá)到1GB 時(shí),Nginx 啟動(dòng) LRU(最近最少使用)算法清理舊緩存。

use_temp path=off :控制臨時(shí)文件的存儲(chǔ)位置,推薦值:off(減少磁盤操作,提升性能)

(3)驗(yàn)證緩存功能

Nginx的核心功能(2)_緩存_08

Nginx的核心功能(2)_nginx_09

四、Nginx rewrite和正則

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

Rewrite的應(yīng)用場(chǎng)景

路徑美化:將/product/123轉(zhuǎn)換為/index.php"h24">1.Nginx正則

字符

描述

^

匹配輸入字符串的起始位置

$

匹配輸入字符串的結(jié)束位置

*

匹配前面的字符零次或多次。如“o1““能匹配“o“及“o!”、"ol"

+

匹配前面的字符一次或多次。如“ol+"能匹配"o1"及"oI"、"o”,但不能匹配"o”

?

匹配前面的字符零次或一次,例如"do(es)?"能匹配"do"或者“does","?等效于“{0,1}"

`

匹配除"\n"之外的任何單個(gè)字符,若要匹配包括“\n"在內(nèi)的任意字符,請(qǐng)使用諸如[.\n]之類的模式

\

將后面接著的字符標(biāo)記為一個(gè)特殊字符或一個(gè)原義字符或一個(gè)向后引用。如“\n"匹配個(gè)換行符,而“$"則匹配“$”

\d

匹配純數(shù)字

{n}

重復(fù)n次

{n,}

重復(fù)n次或更多次

{c}

匹配單個(gè)字符c

[a-z]

匹配 a-z小寫字母的任意一個(gè)

[a-zA-Z]

匹配 a-z 小寫字母或 A-Z 大寫字母的任意一個(gè)

1.nginx location

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

(1)location的語法:

location [匹配模式] {
 # 處理邏輯 (如 root,proxy_pass,rewrite等)
}

匹配模式類型:

模式

說明

location /uri

普通前綴匹配

匹配以指定路徑開頭的URI

location = /

精確匹配

僅匹配完全相同的URI(優(yōu)先級(jí)最高)

location ~

正則匹配

區(qū)分大小寫的正則表達(dá)式匹配

location ~*

正則匹配

不區(qū)分大小寫的正則表達(dá)式匹配

location ^~

精確前綴匹配

匹配前綴路徑后,不再檢查正則匹配(優(yōu)先高于正則)

location /

通用匹配

默認(rèn)方式,優(yōu)先級(jí)最低,其他方式匹配不到時(shí)匹配

loction 的優(yōu)先級(jí)規(guī)則:

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

(2)location驗(yàn)證

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
        return 200 "通用匹配";
        }
location /abc {
        return 200 "普通前綴匹配";
        }
location ~ /test/abcdef {
        return 200 "區(qū)分大小寫正則";
        }
location ~* /test/abc {
        return 200 "不區(qū)分大小寫正則";
        }
location ^~ /abcdef {
        return 200 "精確前綴匹配";
        }
location = /abc {
        return 200 "精確匹配";
        }

Nginx的核心功能(2)_nginx_10

每次請(qǐng)求192.168.10.101/abc后,按優(yōu)先級(jí)順序依次注釋配置文件中的location,會(huì)發(fā)現(xiàn)每次的響應(yīng)內(nèi)容發(fā)生變更了。PS:使用正則模式時(shí),URI部分可以使用正則表達(dá)式

例如:location ~\.(jpglpnglgif)$ {

}

2.Rewrite

(1)Rewrite語法

rewrite <regex> <replacement> [flag];

regex:正則匹配URL字符串(只能對(duì)域名后邊的除去傳遞的參數(shù)外的字符串起作用,例如http://www.kgc.com/index.php"background-color: rgb(231, 243, 237); padding: 1px 3px; border-radius: 4px; overflow-wrap: break-word; text-indent: 0px; display: inline-block;">replacement:重寫跳轉(zhuǎn)后的地址

flag類型:

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

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

redirect:返回302臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的 URL 地址,爬蟲不會(huì)更新url(因?yàn)槭桥R時(shí))

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

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

1.servert{ } 塊中的 rewrite

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

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

2.location{}塊中的rewrite

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

作用域:僅對(duì)該 1ocation 匹配的請(qǐng)求生效(局部生效)。

3.if{} 塊中的 rewrite

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

作用域:依賴 if 表達(dá)式所在的上下文(如在server中或location中)。(2)rewrite flag驗(yàn)證

(2)rewrite flag驗(yàn)證

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
 default_type text/plain;					#使用瀏覽器驗(yàn)證時(shí),為防止瀏覽器請(qǐng)求時(shí)直接下載return的內(nèi)容,而不是在頁面展示內(nèi)容
        location /abc {
                rewrite ^/ /def last;
        }
        location /def {
                return 200 "this is def";
        }

[root@localhost conf]# nginx -s reload

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

Nginx的核心功能(2)_nginx_11

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
 default_type text/plain;    	#使用瀏覽器驗(yàn)證時(shí),為防止瀏覽器請(qǐng)求時(shí)直接下載return的內(nèi)容,而不是在頁面展示內(nèi)容
        location /abc {
                rewrite ^/ /def ;
        }
        location /def {
                return 200 "this is def";
        }

[root@localhost conf]# nginx -s reload

改成break標(biāo)記,使用瀏覽器請(qǐng)求,發(fā)現(xiàn)請(qǐng)求頁面未找到(因?yàn)榫W(wǎng)頁代碼目錄確實(shí)不存在/def的內(nèi)容)說明break標(biāo)記使用當(dāng)前結(jié)果不繼續(xù)向下匹配了

Nginx的核心功能(2)_Nginx_12

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
 default_type text/plain;    	#使用瀏覽器驗(yàn)證時(shí),為防止瀏覽器請(qǐng)求時(shí)直接下載return的內(nèi)容,而不是在頁面展示內(nèi)容
        location /abc {
               rewrite ^/ /def permanent;
        }
        location /def {
                return 200 "this is def";
        }

[root@localhost conf]# nginx -s reload

改成permanent標(biāo)記,使用瀏覽器請(qǐng)求,發(fā)現(xiàn)請(qǐng)求頁面301跳轉(zhuǎn),并且地址欄顯示的是跳轉(zhuǎn)后的地址

Nginx的核心功能(2)_Nginx_13

(3)rewrite中的捕獲組

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

捕獲組“()”

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

引用方式

在 rewrite 的替換字符串中,通過 81 表示第一個(gè)捕獲組,$2 表示第二個(gè),依此類推。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location /category/ {
  							#匹配/category/tech/123,捕獲tech到$1,123到$2
                rewrite ^/category/(.+)/(\d+)$ /archive/$1/$2 last;
        }
location /archive {
  							#返回捕獲的分類和ID
                return 200 "Category:$1,ID:$2";
        }

[root@localhost conf]# nginx -s reload

測(cè)試訪問

Nginx的核心功能(2)_nginx_14

(4)nginx中的set指令

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

語法:set $variable value;

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location /demo {
                set $name "Nginx";
                return 200 "Hello,$name!";
        }

[root@localhost conf]# nginx -s reload

測(cè)試訪問

Nginx的核心功能(2)_Nginx_15

到此這篇關(guān)于Nginx的核心功能--正向代理、反向代理、緩存和Rewrite的文章就介紹到這了,更多相關(guān)Nginx的正向代理、反向代理、緩存和Rewrite內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx 499錯(cuò)誤問題及解決辦法

    Nginx 499錯(cuò)誤問題及解決辦法

    Nginx ("engine x") 是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP服務(wù)器,接下來通過本文給大家介紹Nginx 499錯(cuò)誤問題及解決辦法,一起看看吧
    2016-06-06
  • Nginx下無法使用中文URL的解決方法

    Nginx下無法使用中文URL的解決方法

    最近發(fā)現(xiàn)有很多的url打不開,后來仔細(xì)觀察后發(fā)現(xiàn)是中文url的問題,所以這篇文章主要給大家介紹了Nginx下無法使用中文URL的解決方法,文中提供了兩種方法供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-05-05
  • 解決國內(nèi)k8s的ingress-nginx鏡像無法正常pull拉取問題

    解決國內(nèi)k8s的ingress-nginx鏡像無法正常pull拉取問題

    本文主要介紹了解決國內(nèi)k8s的ingress-nginx鏡像無法正常pull拉取問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Nginx解決Http慢攻擊(Slow HTTP Attack)的方法

    Nginx解決Http慢攻擊(Slow HTTP Attack)的方法

    緩慢的HTTP拒絕服務(wù)攻擊是一種專門針對(duì)于Web的應(yīng)用層拒絕服務(wù)攻擊,本文給大家介紹了Nginx解決Http慢攻擊(Slow HTTP Attack)的方法,需要的朋友可以參考下
    2024-02-02
  • 解決nginx已經(jīng)配置過跨域不生效問題

    解決nginx已經(jīng)配置過跨域不生效問題

    這篇文章主要介紹了解決nginx已經(jīng)配置過跨域不生效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 解讀Nginx和Apache的特點(diǎn)與區(qū)別

    解讀Nginx和Apache的特點(diǎn)與區(qū)別

    這篇文章主要介紹了解讀Nginx和Apache的特點(diǎn)與區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Nginx下修改WordPress固定鏈接導(dǎo)致無法訪問的問題解決

    Nginx下修改WordPress固定鏈接導(dǎo)致無法訪問的問題解決

    這篇文章主要介紹了Nginx下修改WordPress固定鏈接導(dǎo)致無法訪問的問題解決,同時(shí)作者也給出了官方關(guān)于修改固定鏈接的方法,需要的朋友可以參考下
    2015-07-07
  • 使用nginx部署前端項(xiàng)目的實(shí)現(xiàn)

    使用nginx部署前端項(xiàng)目的實(shí)現(xiàn)

    前端項(xiàng)目的部署以前一直是把靜態(tài)資源放到后端工程中,隨后端部署一起部署,本文主要介紹了使用nginx部署前端項(xiàng)目的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • 加速nginx性能: 開啟gzip和緩存

    加速nginx性能: 開啟gzip和緩存

    nginx 是一個(gè)高性能的 Web 服務(wù)器,之前也寫過一些關(guān)于 nginx 的文章。為了提高博客的響應(yīng)速度,可以從設(shè)置 nginx 的 gzip 和緩存這2方面入手。為字體開啟 gzip 和緩存能大大減少帶寬的消耗
    2017-03-03
  • Nginx啟用Brotli算法壓縮的示例

    Nginx啟用Brotli算法壓縮的示例

    這篇文章主要介紹了Nginx啟用Brotli算法壓縮的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03

最新評(píng)論