Nginx location配置類別和匹配優先級

location功能:

匹配的ngnix變量:$request_uri
作用:定義url匹配模式,可以根據請求uri判斷相應配置
配置文件中一般有多個location,分別定義了不同的匹配模式,不同的uri根據匹配結果獲取不同的配置。

location的匹配模式:

location的匹配都是前綴匹配。格式:

location [ 空格 | = | ~ | ~* | !~ | !~* ] /uri/ {}

分為3類:

  • 精確模式:精確匹配(=)
  • 前綴模式: 普通匹配(空格),非正則匹配(^~)
  • 正則模式: 大小寫敏感匹配(~),大小寫不敏感匹配(~*),大小寫敏感不匹配(!~),大小寫不敏感不匹配(!~*)

location匹配優先級:

  1. 先匹配精確模式,命中精確模式,直接返回。否則,繼續匹配前綴模式。
  2. 前綴模式中使用最大前綴原則,選出匹配普通匹配(空格)或非正則匹配(^~)的最長location。
  3. 若最長前綴location是非正則匹配(^~),則返回該最長前綴location。否則,還需要繼續匹配正則模式。
  4. 正則模式的原則是按照正則location定義順序匹配,第一個匹配的location為正則模式結果。
  5. 若正則模式匹配成功,返回正則模式結果。否則,返回前綴模式中的最長前綴location。
  6. 在nginx版本0.7.1 - 0.8.41中,若前綴模式的最長前綴location精確匹配uri,直接返回最長前綴location。
if 精確匹配結果
    return  精確匹配結果
最長前綴結果 = longest: 普通匹配(空格) or 非正則匹配(^~)
if 最長前綴結果 屬于 非正則匹配(^~)
    return 最長前綴結果
if 版本 屬于 0.7.1 - 0.8.41 and 最長前綴結果 == uri:
    return 最長前綴結果
首個正則結果 = first: 大小寫敏感匹配(~) or 大小寫不敏感匹配(~*) or 大小寫敏感不匹配(!~) or 大小寫不敏感不匹配(!~*)
if 首個正則結果:
    return 首個正則結果
else:
    return 最長前綴結果

示例

location / {}

前綴模式,匹配所有uri,最短匹配
所以,這個location為兜底location。即當其他所有location都不匹配時,命中這個location。

location = / {
    [ 配置 A ]
}

location / {
    [ 配置 B ]
}

location /documents/ {
    [ 配置 C ]
}

location ^~ /images/ {
    [ 配置 D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ 配置 E ]
}

uri:“/”
精確匹配:配置 A
uri:“/index.html”
兜底匹配:配置 B
uri:“/documents/document.html”
最長location匹配:配置 C
uri:“/images/1.gif”
非正則匹配:配置 D
uri:“/documents/1.jpg”
正則匹配:配置 E

內部location(@)

內部location不能被外部 Client 所訪問,只能用于重定向。它不能被嵌套,也不能包含嵌套的location。格式為:

location @name {}

示例:

error_page 404 = @fallback
location @fallback {
}

特殊處理location

若前綴模式location以斜杠(/)結尾,并且請求設置由proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass或 memcached_pass等處理器處理,則使用該處理器處理。
但對于末尾不帶斜杠的uri,這時會返回301并重定向到帶斜杠的uri,繼而匹配該location。

location /user/ {
    proxy_pass http://user.example.com;
}

uri: /user/
轉發到ttp://user.example.com
uri:/user
返回301,并重定向到/user/
如果不希望自動重定向,可以定義兩個location,設置不同配置:

location /user/ {
    proxy_pass http://user.example.com;
}
location = /user {
    proxy_pass http://login.example.com;
}

```
uri:/user/
轉發到http://user.example.com;
uri:/user
轉發到http://login.example.com;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容