Nginx平滑升級(jí)核心原理與location配置案例詳解
Nginx平滑升級(jí)與location配置案例詳解
一、Nginx平滑升級(jí)
Nginx平滑升級(jí)指在不中斷服務(wù)的前提下,為Nginx添加新模塊或更新版本,保障業(yè)務(wù)持續(xù)運(yùn)行。以下是基于“為Nginx 1.24.0添加echo-nginx-module模塊”的完整平滑升級(jí)流程,包含詳細(xì)操作步驟、命令解釋及注意事項(xiàng)。
(一)平滑升級(jí)核心原理
平滑升級(jí)的關(guān)鍵在于保留原配置與進(jìn)程信息,通過(guò)重新編譯包含新模塊的Nginx程序,替換舊程序后重啟服務(wù),避免因服務(wù)中斷導(dǎo)致的業(yè)務(wù)損失。核心邏輯為:獲取原編譯參數(shù)→添加新模塊重新編譯→備份舊程序→替換并重啟。
(二)詳細(xì)操作步驟
1. 部署基礎(chǔ)Nginx環(huán)境(前提準(zhǔn)備)
若已部署Nginx可跳過(guò)此步,新環(huán)境需先完成Nginx安裝(此處默認(rèn)已安裝Nginx 1.24.0,且運(yùn)行正常)。
2. 獲取原有Nginx編譯參數(shù)
Nginx的編譯參數(shù)決定了其功能模塊(如SSL、靜態(tài)壓縮等),升級(jí)時(shí)需完整保留原參數(shù),否則新程序會(huì)丟失原有功能。
操作命令:
[root@nginx ~]# nginx -V # 大寫V,可顯示編譯參數(shù);小寫v僅顯示版本
執(zhí)行結(jié)果(含關(guān)鍵編譯參數(shù),需完整記錄):
nginx version: nginx/1.24.0
built by gcc 8.5.0 24210514 (Red Hat 8.5.0-4) (GCC)
built with OpenSSL 1.1.1k FIPS 25 Mar 2421
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx \ # 安裝目錄
--user=nginx \ # 運(yùn)行用戶
--group=nginx \ # 運(yùn)行用戶組
--with-debug \ # 啟用調(diào)試模式
--with-http_ssl_module \ # 啟用SSL模塊(HTTPS必備)
--with-http_realip_module \ # 啟用真實(shí)IP獲取模塊
--with-http_image_filter_module \ # 啟用圖片處理模塊
--with-http_gunzip_module \ # 啟用Gunzip解壓模塊
--with-http_gzip_static_module \ # 啟用靜態(tài)文件Gzip壓縮模塊
--with-http_stub_status_module \ # 啟用Nginx狀態(tài)監(jiān)控模塊
--http-log-path=/var/log/nginx/access.log \ # 訪問(wèn)日志路徑
--error-log-path=/var/log/nginx/error.log # 錯(cuò)誤日志路徑3. 下載新模塊(echo-nginx-module)
echo-nginx-module是OpenResty社區(qū)開(kāi)發(fā)的Nginx模塊,用于在響應(yīng)中直接輸出指定內(nèi)容(如文本、變量等),常用于調(diào)試或簡(jiǎn)單接口返回。
操作步驟:
- 本地下載模塊源碼:訪問(wèn)echo-nginx-module GitHub地址,點(diǎn)擊“Code”→“Download ZIP”,獲取壓縮包(如
echo-nginx-module-master.zip)。 - 上傳至Nginx服務(wù)器:通過(guò)FTP、SCP等工具,將壓縮包上傳到Nginx服務(wù)器的
/root目錄(或其他自定義目錄,需記住路徑)。
4. 重新編譯Nginx(含新模塊)
編譯前需確保服務(wù)器已安裝編譯依賴(如gcc、unzip、pcre-devel、openssl-devel等),若缺少依賴會(huì)導(dǎo)致編譯失敗。
操作步驟:
(1)安裝編譯依賴工具
# 安裝unzip(用于解壓模塊壓縮包) [root@nginx ~]# yum -y install unzip # 安裝Nginx編譯必備依賴(若已安裝可跳過(guò)) [root@nginx ~]# yum -y install gcc pcre-devel openssl-devel zlib-devel
(2)解壓模塊與Nginx源碼包
- 解壓新模塊包:
[root@nginx ~]# unzip echo-nginx-module-master.zip # 解壓后生成目錄echo-nginx-module-master
- 解壓Nginx源碼包:
平滑升級(jí)需基于原版本的源碼進(jìn)行編譯,需確保服務(wù)器存在Nginx 1.24.0的源碼包(若已刪除,需重新從Nginx官網(wǎng)下載nginx-1.24.0.tar.gz并上傳):[root@nginx ~]# tar -zxf nginx-1.24.0.tar.gz # 解壓后生成目錄nginx-1.24.0
(3)配置編譯參數(shù)(含新模塊)
進(jìn)入Nginx源碼目錄,執(zhí)行./configure命令,完整保留原編譯參數(shù),并通過(guò)--add-module指定新模塊的解壓路徑:
[root@nginx ~]# cd nginx-1.24.0/ # 進(jìn)入源碼目錄 [root@nginx nginx-1.24.0]# ./configure \ --prefix=/usr/local/nginx \ # 原參數(shù):安裝目錄 --user=nginx \ # 原參數(shù):運(yùn)行用戶 --group=nginx \ # 原參數(shù):運(yùn)行用戶組 --with-debug \ # 原參數(shù):調(diào)試模式 --with-http_ssl_module \ # 原參數(shù):SSL模塊 --with-http_realip_module \ # 原參數(shù):真實(shí)IP模塊 --with-http_image_filter_module \ # 原參數(shù):圖片處理模塊 --with-http_gunzip_module \ # 原參數(shù):Gunzip模塊 --with-http_gzip_static_module \ # 原參數(shù):靜態(tài)Gzip模塊 --with-http_stub_status_module \ # 原參數(shù):狀態(tài)監(jiān)控模塊 --http-log-path=/var/log/nginx/access.log \ # 原參數(shù):訪問(wèn)日志 --error-log-path=/var/log/nginx/error.log \ # 原參數(shù):錯(cuò)誤日志 --add-module=../echo-nginx-module-master # 新增:新模塊的解壓路徑(相對(duì)源碼目錄)
關(guān)鍵說(shuō)明:--add-module的路徑需準(zhǔn)確(此處../echo-nginx-module-master表示“上一級(jí)目錄下的echo-nginx-module-master”,因源碼目錄在/root/nginx-1.24.0,模塊目錄在/root),路徑錯(cuò)誤會(huì)導(dǎo)致模塊加載失敗。
(4)編譯生成新Nginx程序
執(zhí)行make命令編譯(不可執(zhí)行make install,否則會(huì)覆蓋原安裝目錄,導(dǎo)致配置文件丟失):
# 執(zhí)行編譯(過(guò)程約1-3分鐘,依賴服務(wù)器性能) [root@nginx nginx-1.24.0]# make
(5)驗(yàn)證編譯結(jié)果
編譯完成后,新的Nginx程序會(huì)生成在源碼目錄的objs子目錄下,需確認(rèn)程序存在:
# 查看objs目錄內(nèi)容 [root@nginx nginx-1.24.0]# ls objs/
預(yù)期結(jié)果:目錄中需包含nginx可執(zhí)行文件(即新編譯的Nginx程序),其他文件如addon(模塊相關(guān))、src(源碼編譯文件)等為正常編譯產(chǎn)物。
5. 備份舊程序、替換并重啟服務(wù)
此步驟需嚴(yán)格按順序執(zhí)行,避免因操作失誤導(dǎo)致服務(wù)中斷或程序損壞。
(1)對(duì)比新舊程序的編譯參數(shù)(驗(yàn)證新模塊是否加載)
- 查看舊程序參數(shù)(原Nginx):
[root@nginx nginx-1.24.0]# nginx -V # 無(wú)--add-module參數(shù) nginx version: nginx/1.24.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log
- 查看新程序參數(shù)(編譯后的程序):
[root@nginx nginx-1.24.0]# objs/nginx -V # 需包含--add-module=../echo-nginx-module-master nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --add-module=…/echo-nginx-module-master
**關(guān)鍵驗(yàn)證**:新程序的`configure arguments`末尾需出現(xiàn)新模塊的路徑,確認(rèn)模塊已成功集成。 ##### (2)停止原Nginx服務(wù) ```bash # 優(yōu)雅停止服務(wù)(發(fā)送停止信號(hào),等待現(xiàn)有連接處理完成后退出) [root@nginx nginx-1.24.0]# nginx -s stop # 驗(yàn)證服務(wù)是否已停止(無(wú)80端口監(jiān)聽(tīng)即表示停止成功) [root@nginx nginx-1.24.0]# ss -anlt | grep 80
(3)備份舊程序
將原Nginx程序(/usr/local/nginx/sbin/nginx)備份到安全目錄(如/opt),便于升級(jí)失敗后回滾:
[root@nginx nginx-1.24.0]# cp /usr/local/nginx/sbin/nginx /opt/nginx_old_$(date +%Y%m%d) # 驗(yàn)證備份結(jié)果(查看/opt目錄下是否有備份文件) [root@nginx nginx-1.24.0]# ls /opt/
(4)替換舊程序?yàn)樾鲁绦?/h6>
將objs目錄下的新程序覆蓋到原安裝路徑:
[root@nginx nginx-1.24.0]# cp objs/nginx /usr/local/nginx/sbin/ # 系統(tǒng)會(huì)提示“是否覆蓋”,輸入y確認(rèn) cp:是否覆蓋'/usr/local/nginx/sbin/nginx'? y
(5)啟動(dòng)新Nginx服務(wù)并驗(yàn)證
# 啟動(dòng)新服務(wù) [root@nginx nginx-1.24.0]# /usr/local/nginx/sbin/nginx # 驗(yàn)證服務(wù)狀態(tài)(80端口監(jiān)聽(tīng)表示啟動(dòng)成功) [root@nginx nginx-1.24.0]# ss -anlt | grep 80
預(yù)期結(jié)果:輸出類似LISTEN 0 128 0.0.0.0:80 0.0.0.0:*,表示Nginx已正常啟動(dòng)。
(6)最終驗(yàn)證新模塊是否生效
查看Nginx版本與參數(shù),確認(rèn)新模塊已加載:
[root@nginx ~]# nginx -V
預(yù)期結(jié)果:參數(shù)中包含--add-module=../echo-nginx-module-master,表示平滑升級(jí)完成。
6. 測(cè)試echo模塊功能
通過(guò)配置location使用echo模塊,驗(yàn)證其是否正常工作。
(1)修改Nginx配置文件
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
在server塊中添加如下location配置(用于匹配根路徑/的請(qǐng)求):
server {
listen 80;
server_name localhost;
# 新增:使用echo模塊輸出文本“ycy”
location / {
echo "ycy"; # echo模塊的核心指令,直接輸出指定內(nèi)容
}
}(2)檢查配置文件語(yǔ)法正確性
修改配置后需先檢查語(yǔ)法,避免因錯(cuò)誤導(dǎo)致服務(wù)啟動(dòng)失?。?/p>
[root@nginx ~]# nginx -t
預(yù)期結(jié)果:輸出nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok和nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful,表示語(yǔ)法正確。
(3)重載Nginx配置(無(wú)需重啟服務(wù))
[root@nginx ~]# nginx -s reload
(4)驗(yàn)證echo模塊功能
- 瀏覽器訪問(wèn):直接在瀏覽器輸入Nginx服務(wù)器IP(如
192.168.100.10),會(huì)觸發(fā)文件下載(因echo模塊輸出的文本無(wú)Content-Type頭,瀏覽器默認(rèn)當(dāng)作文件處理,屬于正?,F(xiàn)象)。 - 命令行訪問(wèn)(推薦,更準(zhǔn)確):在本地Windows或其他Linux機(jī)器上執(zhí)行
curl命令:# Windows cmd中執(zhí)行(需確保本地能ping通服務(wù)器IP) [root@ycy3 html]# curl http://192.168.100.10 ycy
**預(yù)期結(jié)果**:輸出`ycy`,表示echo模塊已正常生效,平滑升級(jí)成功。
## 二、Nginx location配置案例
`location`是Nginx的核心配置指令,用于根據(jù)客戶端請(qǐng)求的**URI(統(tǒng)一資源標(biāo)識(shí)符,如`/abc`、`/image/1.jpg`)** 匹配不同的配置塊,實(shí)現(xiàn)訪問(wèn)控制、內(nèi)容轉(zhuǎn)發(fā)、頁(yè)面返回等功能。以下詳細(xì)說(shuō)明`location`的語(yǔ)法、修飾符、匹配規(guī)則及實(shí)操案例。
### (一)location核心概念
#### 1. 功能定位
`location`屬于`server`塊的子配置,每個(gè)`server`可包含多個(gè)`location`,Nginx會(huì)根據(jù)請(qǐng)求的URI匹配對(duì)應(yīng)的`location`,并執(zhí)行該塊中的配置(如`echo`輸出、`proxy_pass`轉(zhuǎn)發(fā)、`deny`拒絕訪問(wèn)等)。
#### 2. 基本語(yǔ)法
```nginx
location [修飾符] pattern {
# 配置指令(如echo、proxy_pass、root等)
指令1;
指令2;
}- 修飾符:可選,用于定義匹配規(guī)則(如精確匹配、正則匹配等),決定匹配優(yōu)先級(jí)。
- pattern:匹配模式,即URI的匹配規(guī)則(如
/abc、~^/image/.*\.jpg$等)。 - 配置塊:匹配成功后執(zhí)行的指令集合。
(二)location修飾符詳解
不同修飾符對(duì)應(yīng)不同的匹配規(guī)則和優(yōu)先級(jí),是location配置的核心。以下為常用修飾符的對(duì)比:
| 修飾符 | 匹配規(guī)則 | 優(yōu)先級(jí) | 適用場(chǎng)景 | 示例 |
|---|---|---|---|---|
= | 精確匹配:URI必須與pattern完全一致(包括字符、長(zhǎng)度、路徑分隔符/) | 最高 | 匹配固定URI(如首頁(yè)/、接口/api/login) | location = /abc { ... }(僅匹配/abc,不匹配/abc/或/abc/123) |
~ | 正則表達(dá)式匹配:區(qū)分大小寫,pattern為正則表達(dá)式 | 中高(按配置順序) | 需區(qū)分大小寫的URI匹配(如/ABC和/abc不同處理) | location ~ /abc$ { ... }(匹配以/abc結(jié)尾的URI,如/test/abc,不匹配/test/ABC) |
^~ | 前綴匹配:URI以pattern開(kāi)頭即匹配,匹配成功后停止后續(xù)搜索(不支持正則) | 中(高于~/~*,低于=) | 匹配某一類前綴URI(如/static/下的所有靜態(tài)資源) | location ^~ /static/ { ... }(匹配/static/css、/static/js/1.js等,且不再檢查后續(xù)正則匹配) |
~* | 正則表達(dá)式匹配:不區(qū)分大小寫,pattern為正則表達(dá)式 | 中高(按配置順序) | 無(wú)需區(qū)分大小寫的URI匹配(如靜態(tài)資源/image和/IMAGE同處理) | location ~* /abc$ { ... }(匹配/abc、/ABC、/aBc等) |
| 無(wú)修飾符 | 前綴匹配:URI以pattern開(kāi)頭即匹配,但匹配成功后仍會(huì)繼續(xù)搜索正則匹配(不支持正則) | 最低 | 通用前綴匹配(如/abc匹配/abc、/abc/123等) | location /abc { ... }(匹配/abc、/abc/、/abc/dsa等) |
@ | 命名location:僅用于內(nèi)部請(qǐng)求(如try_files、error_page跳轉(zhuǎn)),客戶端無(wú)法直接訪問(wèn) | 僅內(nèi)部使用 | 內(nèi)部跳轉(zhuǎn)(如404頁(yè)面、502錯(cuò)誤頁(yè)面) | location @error_404 { return 404 "Page Not Found"; } |
(三)location匹配順序與優(yōu)先級(jí)
Nginx處理location匹配時(shí),嚴(yán)格遵循以下優(yōu)先級(jí)(從高到低),一旦匹配成功且滿足“停止搜索”條件,即不再檢查后續(xù)規(guī)則:
=精確匹配:優(yōu)先檢查所有帶=的location,若URI完全匹配,直接執(zhí)行該配置塊,停止后續(xù)搜索。^~前綴匹配:檢查帶^~的location,若URI以pattern開(kāi)頭,直接執(zhí)行該配置塊,停止后續(xù)搜索(包括正則匹配)。- 正則匹配(
~/~*):按location在配置文件中的定義順序檢查正則匹配(~和~*優(yōu)先級(jí)相同,誰(shuí)在前先匹配誰(shuí)),若匹配成功,執(zhí)行該配置塊,停止后續(xù)搜索。 - 無(wú)修飾符前綴匹配:最后檢查無(wú)修飾符的
location,匹配URI前綴最長(zhǎng)的location(若多個(gè)無(wú)修飾符location的pattern均為URI前綴,選擇最長(zhǎng)的那個(gè)),執(zhí)行該配置塊。
(四)實(shí)操案例(基于echo模塊驗(yàn)證)
以下案例均基于“已安裝echo模塊”的Nginx環(huán)境,通過(guò)echo輸出文本驗(yàn)證匹配結(jié)果,所有案例的server塊基礎(chǔ)配置如下(僅修改location部分):
server {
listen 80;
server_name localhost; # 服務(wù)器IP為192.168.100.10
# 以下為不同案例的location配置
}案例1:無(wú)修飾符的前綴匹配
配置內(nèi)容:
location /abc {
echo "cy"; # 匹配成功后輸出“cy”
}匹配規(guī)則:URI以/abc開(kāi)頭即匹配,不區(qū)分后續(xù)路徑。
測(cè)試結(jié)果(通過(guò)curl命令驗(yàn)證):
# 測(cè)試1:URI=/abc → 匹配成功 [root@ycy3 ~]#curl 192.168.100.10/abc cy # 測(cè)試2:URI=/abc/ → 匹配成功(以/abc開(kāi)頭) [root@ycy3 ~]#curl 192.168.100.10/abc/ cy # 測(cè)試3:URI=/abc/dsa → 匹配成功(以/abc開(kāi)頭) [root@ycy3 ~]#curl 192.168.100.10/abc/dsa cy # 測(cè)試4:URI=/ab → 不匹配(不以/abc開(kāi)頭) [root@ycy3 ~]#curl 192.168.100.10/ab <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.24.0</center> </body> </html>
案例2:=精確匹配(匹配固定URI)
子案例2.1:pattern為/abc(無(wú)末尾/)
配置內(nèi)容:
location = /abc {
echo "ycy"; # 僅匹配/abc時(shí)輸出
}匹配規(guī)則:URI必須與/abc完全一致,多一個(gè)/或多字符均不匹配。
測(cè)試結(jié)果:
# 測(cè)試1:URI=/abc → 完全匹配,輸出“ycy” [root@ycy3 ~]#curl 192.168.100.10/abc ycy # 測(cè)試2:URI=/abc/ → 末尾多“/”,不匹配,返回404 [root@ycy3 ~]#curl 192.168.100.10/abc/ <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.24.0</center> </body> </html>
子案例2.2:pattern為/abc/(有末尾/)
配置內(nèi)容:
location = /abc/ {
echo "ycy"; # 僅匹配/abc/時(shí)輸出
}測(cè)試結(jié)果:
# 測(cè)試1:URI=/abc/ → 完全匹配,輸出“ycy” [root@ycy3 ~]#curl 192.168.100.10/abc/ ycy # 測(cè)試2:URI=/abc → 末尾少“/”,不匹配,返回404 [root@ycy3 ~]#curl 192.168.100.10/abc <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.24.0</center> </body> </html>
關(guān)鍵結(jié)論:=修飾符對(duì)/敏感,配置時(shí)需嚴(yán)格匹配實(shí)際請(qǐng)求的URI格式(如客戶端請(qǐng)求是/abc還是/abc/)。
案例3:~正則匹配(區(qū)分大小寫)
配置內(nèi)容:
location ~ /abc$ { # 正則表達(dá)式:匹配以“/abc”結(jié)尾的URI($表示結(jié)尾)
echo "ycy";
}匹配規(guī)則:URI必須以/abc結(jié)尾,且區(qū)分大小寫(/ABC、/aBc不匹配)。
測(cè)試結(jié)果:
# 測(cè)試1:URI=/abc → 以/abc結(jié)尾,匹配成功,輸出“ycy” [root@ycy3 ~]#curl 192.168.100.10/abc ycy # 測(cè)試2:URI=/test/abc → 以/abc結(jié)尾,匹配成功,輸出“ycy” [root@ycy3 ~]#curl 192.168.100.10/test/abc ycy # 測(cè)試3:URI=/abc/ → 以/abc/結(jié)尾(非/abc),不匹配,返回404 [root@ycy3 ~]#curl 192.168.100.10/abc/ <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.24.0</center> </body> </html> # 測(cè)試4:URI=/ABC → 大小寫不匹配,不匹配,返回404 [root@ycy3 ~]#curl 192.168.100.10/ABC <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.24.0</center> </body> </html>
案例4:=與~的優(yōu)先級(jí)對(duì)比
配置內(nèi)容(=和~同時(shí)存在,=在前):
# 正則匹配:以/abc結(jié)尾的URI
location ~ /abc$ {
echo "ycy";
}
# 精確匹配:僅/abc
location = /abc {
echo "cy";
}
匹配規(guī)則:根據(jù)優(yōu)先級(jí),=精確匹配高于~正則匹配,因此/abc會(huì)優(yōu)先匹配=的location。
測(cè)試結(jié)果:
# 測(cè)試:URI=/abc → 優(yōu)先匹配=的location,輸出“cy”(而非正則的“ycy”) [root@ycy3 ~]#curl 192.168.100.10/abc cy # 測(cè)試:URI=/test/abc → 不匹配=的location,匹配~的正則,輸出“ycy” [root@ycy3 ~]#curl 192.168.100.10/test/abc ycy
關(guān)鍵結(jié)論:無(wú)論=和~在配置文件中的順序如何,=的優(yōu)先級(jí)始終最高,優(yōu)先匹配。
案例5:~*正則匹配(不區(qū)分大小寫)
配置內(nèi)容:
location ~* /abc$ { # 正則表達(dá)式:以/abc結(jié)尾,不區(qū)分大小寫
echo "ycy";
}匹配規(guī)則:URI以/abc結(jié)尾,且不區(qū)分大小寫(/ABC、/aBc均匹配)。
測(cè)試結(jié)果:
# 測(cè)試1:URI=/abc → 匹配成功,輸出“ycy” [root@ycy3 ~]#curl 192.168.100.10/abc ycy # 測(cè)試2:URI=/ABC → 大小寫不同,但~*不區(qū)分,匹配成功,輸出“ycy” [root@ycy3 ~]#curl 192.168.100.10/ABC ycy # 測(cè)試3:URI=/aBc → 混合大小寫,匹配成功,輸出“ycy” [root@ycy3 ~]#curl 192.168.100.10/aBc ycy
(五)location匹配優(yōu)先級(jí)總結(jié)(從高到低)
#依次輸出測(cè)試優(yōu)先級(jí)
location = /abc {
echo "ycy1";
}
location ~ /abc {
echo "ycy2";
}
location ~*/abc {
echo "ycy3";
}
location ^~ /abc {
echo "ycy4";
}為便于記憶,將location的匹配優(yōu)先級(jí)整理為以下順序,實(shí)際配置時(shí)需嚴(yán)格遵循:
=精確匹配:完全匹配URI,優(yōu)先級(jí)最高,匹配后立即執(zhí)行,停止后續(xù)搜索。^~前綴匹配:URI以pattern開(kāi)頭,匹配后停止后續(xù)搜索(包括正則匹配)。~/~*正則匹配:按配置文件中location的定義順序匹配,先定義的優(yōu)先,匹配后停止搜索(~和~*優(yōu)先級(jí)相同,僅區(qū)分大小寫)。- 無(wú)修飾符前綴匹配:URI以
pattern開(kāi)頭,匹配最長(zhǎng)前綴的location,優(yōu)先級(jí)最低。
配置建議:
- 固定URI(如
/、/api/login)用=精確匹配,提高匹配效率。 - 靜態(tài)資源目錄(如
/static/、/image/)用^~前綴匹配,避免被正則匹配干擾。 - 需區(qū)分大小寫的URI(如API接口
/User/Info)用~正則匹配。 - 無(wú)需區(qū)分大小寫的URI(如靜態(tài)資源
/css、/CSS)用~*正則匹配。 - 通用前綴URI(如
/blog/下的所有文章)用無(wú)修飾符匹配,作為兜底規(guī)則。
到此這篇關(guān)于Nginx平滑升級(jí)核心原理與location配置案例詳解的文章就介紹到這了,更多相關(guān)Nginx平滑升級(jí)原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx不關(guān)機(jī)升級(jí)(平滑升級(jí))的實(shí)戰(zhàn)指南
- Nginx進(jìn)行平滑升級(jí)的實(shí)戰(zhàn)指南(不中斷服務(wù)版本更新)
- Nginx 平滑升級(jí)的實(shí)現(xiàn)(拒絕服務(wù)漏洞)
- Nginx生產(chǎn)環(huán)境平滑升級(jí)的實(shí)現(xiàn)
- Linux版本中Nginx平滑升級(jí)與回退
- 圖文詳解Nginx版本平滑升級(jí)方案
- 1分鐘搞定Nginx版本的平滑升級(jí)與回滾的方法
- 詳解nginx平滑升級(jí)的過(guò)程
- Nginx1.8.0版本平滑升級(jí)新版本1.9.7
- Nginx平滑升級(jí)的詳細(xì)操作方法
相關(guān)文章
windows下nginx的安裝使用及解決80端口被占用nginx不能啟動(dòng)的問(wèn)題
這篇文章主要給大家介紹了關(guān)于windows下nginx的安裝使用,以及如何解決80端口被占用導(dǎo)致nginx不能啟動(dòng)的問(wèn)題,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04
Keepalived+Nginx+Tomcat 實(shí)現(xiàn)高可用Web集群的示例代碼
這篇文章主要介紹了Keepalived+Nginx+Tomcat 實(shí)現(xiàn)高可用Web集群的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
配置Nginx實(shí)現(xiàn)訪問(wèn)本地靜態(tài)資源的完整指南
Nginx 是一個(gè)高性能的 HTTP 服務(wù)器和反向代理服務(wù)器,廣泛用于靜態(tài)資源的托管和負(fù)載均衡,在開(kāi)發(fā)和生產(chǎn)環(huán)境中,我們常常需要使用 Nginx 來(lái)提供本地靜態(tài)資源的訪問(wèn),本文將詳細(xì)介紹如何配置 Nginx 以便訪問(wèn)本地靜態(tài)資源,需要的朋友可以參考下2024-08-08
nginx 版本升級(jí)的實(shí)現(xiàn)方法
文介紹了如何在CentOS7服務(wù)器上無(wú)中斷地將Nginx從1.18.0版本升級(jí)到1.19.7版本,提供了兩種升級(jí)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09
Nginx實(shí)現(xiàn)基于請(qǐng)求頭的訪問(wèn)控制配置的示例
在Nginx中,可以使用"allow"和"deny"指令來(lái)實(shí)現(xiàn)IP訪問(wèn)限制,本文給大家介紹Nginx實(shí)現(xiàn)基于請(qǐng)求頭的訪問(wèn)控制配置,感興趣的朋友一起看看吧2023-11-11
Nginx限制IP訪問(wèn)的實(shí)現(xiàn)示例
限制某些IP地址訪問(wèn)網(wǎng)站是一個(gè)常見(jiàn)的需求,本文主要介紹了Nginx限制IP訪問(wèn)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06

