最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx路徑匹配的配置指南

 更新時(shí)間:2025年07月18日 09:18:12   作者:墨瑾軒  
在大型互聯(lián)網(wǎng)架構(gòu)中,Nginx作為反向代理和負(fù)載均衡的核心組件,其路徑匹配精度直接影響系統(tǒng)路由的準(zhǔn)確性,所以本文給大家詳細(xì)介紹了Nginx路徑匹配的配置指南,需要的朋友可以參考下

Nginx的location配置,你是“迷路小菜鳥”還是“火箭工程師”?

你有沒有遇到過這些“坑”:

  • /api的請(qǐng)求被分配到/static目錄?
  • /favicon.ico的請(qǐng)求總被忽略?
  • 正則匹配和前綴匹配打架?

這就是 Nginx的location匹配規(guī)則 的“魔法”!它讓你的請(qǐng)求處理像“高速公路”一樣高效,像“瑞士軍刀”一樣靈活。

本文將帶你從 “迷路小菜鳥”“火箭工程師”,手把手教你寫出“神級(jí)配置”!

第一戰(zhàn):基礎(chǔ)操作——“快遞分揀站”的規(guī)則

1.1 精確匹配(=):快遞員的“人臉識(shí)別”

問題:只有完全相同的路徑才能觸發(fā)配置?

解決方案:用 = 實(shí)現(xiàn)精確匹配!

# 精確匹配 /favicon.ico
location = /favicon.ico {
    root /var/www/static;  # 指定靜態(tài)文件路徑
    expires 30d;           # 瀏覽器緩存30天
}

# 請(qǐng)求示例:
# ? 匹配:http://example.com/favicon.ico
# ? 不匹配:http://example.com/favicon.ico?version=1

注釋

  • = /path:必須完全匹配,連查詢參數(shù)(?后的內(nèi)容)都不行!
  • root vs alias
    • root:路徑拼接(如 /favicon.ico/var/www/static/favicon.ico)。
    • alias:路徑替換(如 /static/images/logo.png/var/www/images/logo.png)。

1.2 前綴匹配(無修飾符):快遞員的“地址模糊搜索”

問題:想匹配所有以 /api 開頭的請(qǐng)求?

解決方案:用 普通前綴匹配!

# 匹配所有以 /api 開頭的路徑
location /api {
    proxy_pass http://backend_api;  # 反向代理到后端API
}

# 請(qǐng)求示例:
# ? 匹配:/api/user、/api/v1/login
# ? 不匹配:/apicheck(因?yàn)殚_頭不是/api)

注釋

  • 最長(zhǎng)前綴優(yōu)先:如果有兩個(gè)前綴匹配(如 /api/apic),Nginx會(huì)選最長(zhǎng)的。
  • 結(jié)尾斜杠的玄機(jī)
    • location /api/:必須以 /api/ 開頭(如 /api/123)。
    • location /api:會(huì)匹配 /api/apic

第二戰(zhàn):正則匹配——“快遞員的魔法濾鏡”

2.1 區(qū)分大小寫的正則匹配(~):快遞員的“顯微鏡”

問題:想?yún)^(qū)分 .jpg.JPG?

解決方案:用 ~ 實(shí)現(xiàn)區(qū)分大小寫的正則匹配!

# 匹配以 .jpg 結(jié)尾的圖片(區(qū)分大小寫)
location ~ \.jpg$ {
    root /var/www/images;
    expires 30d;
}

# 請(qǐng)求示例:
# ? 匹配:/photo.jpg
# ? 不匹配:/photo.JPG

注釋

  • 正則語法\. 表示匹配點(diǎn)號(hào),$ 表示結(jié)尾。
  • 正則順序敏感:多個(gè)正則匹配時(shí),Nginx按配置順序選擇第一個(gè)匹配的!

2.2 不區(qū)分大小寫的正則匹配(~*):快遞員的“全息掃描”

問題:想同時(shí)匹配 .jpg、.JPG、.png?

解決方案:用 ~* 實(shí)現(xiàn)不區(qū)分大小寫的正則匹配!

# 匹配所有圖片格式(不區(qū)分大小寫)
location ~* \.(jpg|png|gif)$ {
    root /var/www/images;
    expires 30d;
}

# 請(qǐng)求示例:
# ? 匹配:/logo.PNG、/banner.gif

注釋

  • 多格式匹配:用 | 分隔多個(gè)后綴(如 jpg|png|gif)。
  • 性能注意:不區(qū)分大小寫的正則匹配速度稍慢,慎用在高頻路徑上!

第三戰(zhàn):優(yōu)先級(jí)規(guī)則——“快遞員的VIP通道”

3.1 優(yōu)先級(jí)順序:從“皇帝”到“平民”

問題:為什么我的正則匹配被前綴匹配覆蓋了?

解決方案:牢記 優(yōu)先級(jí)順序!

# 精確匹配(皇帝級(jí))
location = / {
    root /var/www/html;
}

# 最長(zhǎng)前綴匹配(王侯級(jí))
location ^~ /static/ {
    root /var/www/static;
}

# 正則匹配(士大夫級(jí))
location ~ \.php$ {
    proxy_pass http://php_backend;
}

# 普通前綴匹配(平民級(jí))
location / {
    root /var/www/html;
}

注釋

  • 優(yōu)先級(jí)順序
    1. = 精確匹配
    2. ^~ 最長(zhǎng)前綴匹配(停止后續(xù)匹配)
    3. ~~* 正則匹配(按配置順序)
    4. 普通前綴匹配(最長(zhǎng)匹配)
  • 守則^~ 比正則更優(yōu)先!

第四戰(zhàn):實(shí)戰(zhàn)案例——“快遞分揀站”的終極挑戰(zhàn)

4.1 場(chǎng)景:電商系統(tǒng)的動(dòng)靜分離

需求

  • 靜態(tài)資源(.css.js)直接返回,緩存30天。
  • API請(qǐng)求(/api/*)反向代理到后端服務(wù)。
  • 所有其他請(qǐng)求返回 index.html

解決方案

# 靜態(tài)資源:不區(qū)分大小寫的正則匹配
location ~* \.(css|js|png|jpg|gif)$ {
    root /var/www/static;
    expires 30d;
}

# API請(qǐng)求:最長(zhǎng)前綴匹配(優(yōu)先于正則)
location ^~ /api/ {
    proxy_pass http://backend_api;
}

# 默認(rèn)請(qǐng)求:普通前綴匹配
location / {
    root /var/www/html;
    index index.html;
}

注釋

  • 靜態(tài)資源優(yōu)先:用 ~* 匹配圖片和樣式表,避免被 /api 覆蓋。
  • API隔離:用 ^~ 確保 /api 不被正則匹配干擾。

第五戰(zhàn):避坑指南——“快遞員的防雷手冊(cè)”

5.1 坑點(diǎn)1:斜杠的“隱形炸彈”

問題:為什么 /api/api/ 會(huì)匹配不同的配置?

解決方案:統(tǒng)一路徑結(jié)尾的斜杠!

# 坑點(diǎn)示例
location /api {
    proxy_pass http://backend_api;  # 匹配 /api 和 /apic
}

location /api/ {
    proxy_pass http://backend_api_v2;  # 僅匹配 /api/
}

# 建議:統(tǒng)一用 ^~ 避免歧義
location ^~ /api {
    proxy_pass http://backend_api;
}

注釋

  • 斜杠的玄學(xué)/api 會(huì)匹配 /api/123,但 /api/ 只匹配 /api/!
  • 最佳實(shí)踐:用 ^~ 替代普通前綴匹配,避免斜杠陷阱!

5.2 坑點(diǎn)2:正則匹配的“順序詛咒”

問題:為什么第一個(gè)正則匹配的配置總是生效?

解決方案:按優(yōu)先級(jí)排序!

# 錯(cuò)誤示例:正則順序顛倒
location ~ \.jpg$ { ... }  # 會(huì)被后面的覆蓋!
location ~ \.png$ { ... }  # 實(shí)際生效

# 正確示例:按重要性排序
location ~ \.png$ { ... }  # 更重要的匹配放前面
location ~ \.jpg$ { ... }

注釋

  • 正則順序敏感:Nginx會(huì)按配置順序選擇第一個(gè)匹配的正則!
  • 調(diào)試技巧:用 curl -I http://example.com/test.png 查看實(shí)際匹配的配置。

第六戰(zhàn):高級(jí)技巧——“快遞員的黑科技”

6.1 使用 map 實(shí)現(xiàn)動(dòng)態(tài)路由

問題:想根據(jù)路徑動(dòng)態(tài)選擇后端服務(wù)器?

解決方案:用 map 指令!

# 定義變量 $backend,根據(jù)路徑動(dòng)態(tài)選擇后端
map $uri $backend {
    default http://default-backend;
    "~^/xianyang/" http://xianyang-backend;
    "~^/api/" http://api-backend;
}

server {
    listen 80;

    location / {
        proxy_pass $backend;  # 動(dòng)態(tài)選擇后端
    }
}

注釋

  • map 的魔法:根據(jù) $uri 動(dòng)態(tài)設(shè)置 $backend,適合復(fù)雜路由場(chǎng)景。
  • 性能優(yōu)勢(shì)map 是預(yù)處理指令,比 if 更高效!

6.2 使用 try_files 實(shí)現(xiàn)優(yōu)雅降級(jí)

問題:想先檢查靜態(tài)文件是否存在,否則返回404?

解決方案:用 try_files!

location / {
    try_files $uri $uri/ /index.html;  # 先找文件,再找目錄,最后返回首頁
}

注釋

  • try_files 的流程
    1. 檢查 $uri 是否存在(如 /about.html)。
    2. 檢查 $uri/ 是否存在(如 /about/ 目錄)。
    3. 最終返回 /index.html(適合SPA應(yīng)用)。

常見問題:你問我答

Q:為什么我的 /api 路徑匹配了 /apic?
A:

  • 因?yàn)槠胀ㄇ熬Y匹配是“最長(zhǎng)匹配”,/api 會(huì)匹配 /apic!
  • 解決方法:用 ^~ /api 替代普通前綴匹配。

Q:如何強(qiáng)制重定向到帶斜杠的路徑?
A:

  • 在配置中添加 location /api { return 301 /api/; }。

Q:正則匹配為什么比前綴匹配優(yōu)先級(jí)低?
A:

  • Nginx的設(shè)計(jì)哲學(xué)是“先精確匹配,再正則匹配”,確保最長(zhǎng)前綴優(yōu)先。

結(jié)論:成為Nginx的“location大師”

通過本文的七個(gè)步驟,你已經(jīng)掌握了:

  1. 精確匹配= 的“人臉識(shí)別”能力。
  2. 前綴匹配:普通前綴和 ^~ 的“地址模糊搜索”。
  3. 正則匹配~~* 的“魔法濾鏡”。
  4. 優(yōu)先級(jí)規(guī)則:從“皇帝”到“平民”的匹配順序。
  5. 實(shí)戰(zhàn)案例:電商系統(tǒng)的動(dòng)靜分離配置。
  6. 避坑指南:斜杠陷阱和正則順序詛咒。
  7. 高級(jí)技巧maptry_files 的“黑科技”。

最后的小彩蛋
如果你在開發(fā)一個(gè)“多租戶系統(tǒng)”,記得用 map 根據(jù)子域名動(dòng)態(tài)選擇配置,用 ^~ 隔離公共資源路徑!

以上就是Nginx路徑匹配的配置指南的詳細(xì)內(nèi)容,更多關(guān)于Nginx路徑匹配的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 阿里云國(guó)際版使用Nginx作為HTTPS轉(zhuǎn)發(fā)代理服務(wù)器的處理方法

    阿里云國(guó)際版使用Nginx作為HTTPS轉(zhuǎn)發(fā)代理服務(wù)器的處理方法

    本文介紹了使用NGINX作為HTTPS流量轉(zhuǎn)發(fā)代理的兩種方法。它總結(jié)了NGINX使用HTTP?CONNECT隧道和NGINX流充當(dāng)HTTPS轉(zhuǎn)發(fā)代理的解決方案的原則,環(huán)境構(gòu)建要求,應(yīng)用場(chǎng)景和關(guān)鍵問題
    2022-05-05
  • nginx中root和alias指令的使用

    nginx中root和alias指令的使用

    這篇文章主要介紹了nginx中root和alias指令的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Nginx如何配置Http、Https、WS、WSS的方法步驟

    Nginx如何配置Http、Https、WS、WSS的方法步驟

    這篇文章主要介紹了Nginx如何配置Http、Https、WS、WSS的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Nginx中配置防盜鏈的方法實(shí)現(xiàn)

    Nginx中配置防盜鏈的方法實(shí)現(xiàn)

    在數(shù)字化時(shí)代,保護(hù)網(wǎng)站內(nèi)容免受盜鏈至關(guān)重要,Nginx防盜鏈通過檢查請(qǐng)求頭Referer字段來拒絕非法來源請(qǐng)求,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-10-10
  • Nginx訪問日志切割的3種實(shí)現(xiàn)方法

    Nginx訪問日志切割的3種實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Nginx訪問日志切割的3種實(shí)現(xiàn)方法,隨著訪問量的增長(zhǎng),日志文件會(huì)越來越大,時(shí)間長(zhǎng)既會(huì)影響訪問的速度,也會(huì)占用一部分磁盤空間,這時(shí)候就需要日志切割了,需要的朋友可以參考下
    2023-08-08
  • nginx如何開啟Gzip壓縮

    nginx如何開啟Gzip壓縮

    啟用Gzip壓縮能顯著減小網(wǎng)頁資源如css、js的體積,提升加載速度,配置方法簡(jiǎn)單,在nginx的http塊中添加規(guī)則后重啟即可,注意,不適用于圖片和大文件壓縮
    2024-11-11
  • nginx pod hook鉤子優(yōu)雅關(guān)閉示例詳解

    nginx pod hook鉤子優(yōu)雅關(guān)閉示例詳解

    這篇文章主要為大家介紹了nginx pod hook鉤子優(yōu)雅關(guān)閉示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • linux下nginx負(fù)載均衡搭建的方法步驟

    linux下nginx負(fù)載均衡搭建的方法步驟

    本篇文章主要介紹了linux下nginx負(fù)載均衡搭建的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • nginx代理多次302的解決方法(nginx Follow 302)

    nginx代理多次302的解決方法(nginx Follow 302)

    這篇文章主要介紹了nginx代理多次302的解決方法(nginx Follow 302),詳細(xì)的介紹了解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • nginx實(shí)現(xiàn)多geoserver服務(wù)的負(fù)載均衡的示例代碼

    nginx實(shí)現(xiàn)多geoserver服務(wù)的負(fù)載均衡的示例代碼

    本文主要介紹了nginx實(shí)現(xiàn)多geoserver服務(wù)的負(fù)載均衡的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評(píng)論

鹤山市| 寿宁县| 淮南市| 台江县| 丘北县| 泰来县| 阿拉善左旗| 保靖县| 淳安县| 大港区| 马鞍山市| 泸溪县| 龙江县| 贵溪市| 平舆县| 兰考县| 温宿县| 酉阳| 淮阳县| 屏东县| 鹤壁市| 涪陵区| 长宁区| 长子县| 宽甸| 昌宁县| 漾濞| 万盛区| 枣庄市| 潢川县| 灵璧县| 曲靖市| 宝山区| 夹江县| 隆昌县| 栾城县| 政和县| 平罗县| 新平| 柞水县| 内丘县|