nginx前綴匹配的實(shí)現(xiàn)
nginx
location ^~ /task/ {
# 這樣,當(dāng)您訪問(wèn) http://hostname:port/task/test 時(shí),
# 請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到 proxy_pass /test,注意 /task/ 前綴在轉(zhuǎn)發(fā)時(shí)被去掉了。
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
當(dāng)您希望保留原始請(qǐng)求的 URI 時(shí),您應(yīng)該在 proxy_pass 指令中使用 ; 來(lái)結(jié)束地址部分,然后在后面添加 proxy_set_header Host $host; 來(lái)確保請(qǐng)求頭的 Host 字段被正確設(shè)置。
請(qǐng)注意,我在 proxy_pass 指令的末尾添加了一個(gè)斜杠 /。這是非常重要的,因?yàn)樗嬖V Nginx 在轉(zhuǎn)發(fā)請(qǐng)求時(shí)去掉匹配的前綴(在這個(gè)例子中是 /task/)。如果省略了這個(gè)斜杠,Nginx 會(huì)將完整的原始 URI(包括 /task/ 前綴)轉(zhuǎn)發(fā)到后端服務(wù)器。
補(bǔ)充
Nginx 的匹配順序是基于配置文件中的 location 塊和它們的指令前綴。下面是 Nginx 匹配順序的詳細(xì)說(shuō)明:
精確匹配:
如果請(qǐng)求的 URI 與location塊中的路徑完全匹配(以=開(kāi)頭),則 Nginx 會(huì)選擇該location塊進(jìn)行處理。最長(zhǎng)前綴匹配:
如果沒(méi)有精確匹配,Nginx 會(huì)進(jìn)行最長(zhǎng)前綴匹配。它會(huì)選擇路徑最長(zhǎng)的location塊,其中路徑可以是普通字符串(不帶^~或正則表達(dá)式)或帶有^~前綴的路徑。如果找到以^~開(kāi)頭的location塊,Nginx 會(huì)立即停止搜索并使用該塊,即使存在其他更長(zhǎng)的普通字符串路徑。正則表達(dá)式匹配:
如果最長(zhǎng)前綴匹配未找到匹配的location塊,Nginx 會(huì)檢查以~或~*開(kāi)頭的location塊,這些塊使用正則表達(dá)式來(lái)匹配請(qǐng)求的 URI。~表示區(qū)分大小寫(xiě)的正則表達(dá)式匹配,而~*表示不區(qū)分大小寫(xiě)的匹配。Nginx 會(huì)按照配置文件中的順序逐個(gè)檢查這些正則表達(dá)式,直到找到第一個(gè)匹配的location塊。默認(rèn)處理:
如果以上三個(gè)步驟都沒(méi)有找到匹配的location塊,Nginx 會(huì)使用默認(rèn)的location塊。默認(rèn)的location塊通常是一個(gè)以/開(kāi)頭的普通字符串路徑,它會(huì)匹配所有未被其他location塊捕獲的請(qǐng)求。
以下是一個(gè)簡(jiǎn)單的示例配置,展示了 Nginx 的匹配順序:
server {
listen 80;
server_name example.com;
location = /exact-match {
# 處理精確匹配的請(qǐng)求
}
location ^~ /prefix-match {
# 處理以 "prefix-match" 開(kāi)頭的最長(zhǎng)前綴請(qǐng)求
}
location / {
# 處理所有其他請(qǐng)求
}
location ~* \.php$ {
# 處理所有以 ".php" 結(jié)尾的請(qǐng)求,不區(qū)分大小寫(xiě)
}
location ~ \.jpg$ {
# 處理所有以 ".jpg" 結(jié)尾的請(qǐng)求,區(qū)分大小寫(xiě)
}
}
在這個(gè)示例中,如果請(qǐng)求是 /exact-match,Nginx 會(huì)選擇第一個(gè) location 塊。如果請(qǐng)求是 /prefix-match/something,Nginx 會(huì)選擇第二個(gè) location 塊,因?yàn)?nbsp;^~ 前綴指定了最長(zhǎng)前綴匹配。對(duì)于所有其他請(qǐng)求,Nginx 會(huì)按照配置文件中的順序繼續(xù)檢查正則表達(dá)式匹配,或者最終使用默認(rèn)的第三個(gè) location 塊。
到此這篇關(guān)于nginx前綴匹配的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)nginx前綴匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx 中 proxy_intercept_errors 實(shí)現(xiàn)后端 502/
本文主要介紹了Nginx 中 proxy_intercept_errors 實(shí)現(xiàn)后端 502/504 錯(cuò)誤的優(yōu)雅降級(jí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-04-04
nginx反向代理導(dǎo)致session失效的問(wèn)題解決
這篇文章主要介紹了nginx反向代理導(dǎo)致session失效的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Nginx?部署的虛擬主機(jī)使用?Let's?Encrypt?加密?https的方法
HTTPS 是現(xiàn)在網(wǎng)站的標(biāo)配了,很多服務(wù)都是必須使用 https,如果你不使用的話(huà),瀏覽器可能就不會(huì)對(duì)你非常友好了,這篇文章主要介紹了Nginx?部署的虛擬主機(jī)如何使用?Let's?Encrypt?來(lái)進(jìn)行加密?https,需要的朋友可以參考下2022-07-07
nginx中配置使用proxy?protocol協(xié)議的全過(guò)程
proxy protocol是一個(gè)Internet協(xié)議,通過(guò)為tcp添加一個(gè)很小的頭信息,來(lái)方便的傳遞客戶(hù)端信息,在網(wǎng)絡(luò)情況復(fù)雜又需要獲取用戶(hù)真實(shí)IP時(shí)非常有用,這篇文章主要給大家介紹了關(guān)于nginx中配置使用proxy?protocol協(xié)議的相關(guān)資料,需要的朋友可以參考下2022-04-04
Nginx優(yōu)化服務(wù)之網(wǎng)頁(yè)壓縮的實(shí)現(xiàn)方法
這篇文章主要介紹了Nginx優(yōu)化服務(wù)之網(wǎng)頁(yè)壓縮的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Nginx配置動(dòng)態(tài)代理后通過(guò)curl訪問(wèn)報(bào)403問(wèn)題
本文主要介紹了Nginx配置動(dòng)態(tài)代理后通過(guò)curl訪問(wèn)報(bào)403問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
nginx中調(diào)度算法的五種實(shí)現(xiàn)
本文主要介紹了nginx中調(diào)度算法的五種實(shí)現(xiàn),包括輪詢(xún)、權(quán)重輪詢(xún)、IP哈希、fair和URL哈希,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
nginx:?[emerg]?unknown?directive報(bào)錯(cuò)誤的問(wèn)題
本文主要介紹了nginx:?[emerg]?unknown?directive報(bào)錯(cuò)誤的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09

