日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

nginx location 在配置中的优先级

發(fā)布時(shí)間:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx location 在配置中的优先级 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

                                                        轉(zhuǎn)載:http://blog.csdn.net/xy2204/article/details/47749405

?

?

先來(lái)一張nginx模型圖? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VS? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 再來(lái)一張node模型圖

?

?

?

location表達(dá)式類型

  • ~ 表示執(zhí)行一個(gè)正則匹配,區(qū)分大小寫(xiě)
  • ~* 表示執(zhí)行一個(gè)正則匹配,不區(qū)分大小寫(xiě)
  • ^~ 表示普通字符匹配。使用前綴匹配。如果匹配成功,則不再匹配其他location。
  • = 進(jìn)行普通字符精確匹配。也就是完全匹配。
  • @ 它定義一個(gè)命名的 location,使用在內(nèi)部定向時(shí),例如 error_page, try_files

?

?

location優(yōu)先級(jí)說(shuō)明

在nginx的location和配置中l(wèi)ocation的順序沒(méi)有太大關(guān)系。正location表達(dá)式的類型有關(guān)。相同類型的表達(dá)式,字符串長(zhǎng)的會(huì)優(yōu)先匹配。

以下是按優(yōu)先級(jí)排列說(shuō)明:

  • 等號(hào)類型(=)的優(yōu)先級(jí)最高。一旦匹配成功,則不再查找其他匹配項(xiàng)。
  • ^~類型表達(dá)式。一旦匹配成功,則不再查找其他匹配項(xiàng)。
  • 正則表達(dá)式類型(~ ~*)的優(yōu)先級(jí)次之。如果有多個(gè)location的正則能匹配的話,則使用正則表達(dá)式最長(zhǎng)的那個(gè)。
  • 常規(guī)字符串匹配類型。按前綴匹配。
  • location優(yōu)先級(jí)示例

    location = / {# 僅僅匹配請(qǐng)求 /[ configuration A ] } location / {# 匹配所有以 / 開(kāi)頭的請(qǐng)求。# 但是如果有更長(zhǎng)的同類型的表達(dá)式,則選擇更長(zhǎng)的表達(dá)式。# 如果有正則表達(dá)式可以匹配,則優(yōu)先匹配正則表達(dá)式。[ configuration B ] } location /documents/ {# 匹配所有以 /documents/ 開(kāi)頭的請(qǐng)求。# 但是如果有更長(zhǎng)的同類型的表達(dá)式,則選擇更長(zhǎng)的表達(dá)式。# 如果有正則表達(dá)式可以匹配,則優(yōu)先匹配正則表達(dá)式。[ configuration C ] } location ^~ /images/ {# 匹配所有以 /images/ 開(kāi)頭的表達(dá)式,如果匹配成功,則停止匹配查找。# 所以,即便有符合的正則表達(dá)式location,也不會(huì)被使用[ configuration D ] } location ~* \.(gif|jpg|jpeg)$ {# 匹配所有以 gif jpg jpeg結(jié)尾的請(qǐng)求。# 但是 以 /images/開(kāi)頭的請(qǐng)求,將使用 Configuration D[ configuration E ] }

      

     

    請(qǐng)求匹配示例

    / -> configuration A /index.html -> configuration B /documents/document.html -> configuration C /images/1.gif -> configuration D /documents/1.jpg -> configuration E

      

    注意,以上的匹配和在配置文件中定義的順序無(wú)關(guān)。

    ?

    ?

    ?

    1. location正則寫(xiě)法

    一個(gè)示例:

    location = / {# 精確匹配 / ,主機(jī)名后面不能帶任何字符串[ configuration A ] } location / {# 因?yàn)樗械牡刂范家?/ 開(kāi)頭,所以這條規(guī)則將匹配到所有請(qǐng)求# 但是正則和最長(zhǎng)字符串會(huì)優(yōu)先匹配[ configuration B ] } location /documents/ {# 匹配任何以 /documents/ 開(kāi)頭的地址,匹配符合以后,還要繼續(xù)往下搜索# 只有后面的正則表達(dá)式?jīng)]有匹配到時(shí),這一條才會(huì)采用這一條[ configuration C ] } location ~ /documents/Abc {# 匹配任何以 /documents/ 開(kāi)頭的地址,匹配符合以后,還要繼續(xù)往下搜索# 只有后面的正則表達(dá)式?jīng)]有匹配到時(shí),這一條才會(huì)采用這一條[ configuration CC ] } location ^~ /images/ {# 匹配任何以 /images/ 開(kāi)頭的地址,匹配符合以后,停止往下搜索正則,采用這一條。[ configuration D ] } location ~* \.(gif|jpg|jpeg)$ {# 匹配所有以 gif,jpg或jpeg 結(jié)尾的請(qǐng)求# 然而,所有請(qǐng)求 /images/ 下的圖片會(huì)被 config D 處理,因?yàn)?^~ 到達(dá)不了這一條正則[ configuration E ] } location /images/ {# 字符匹配到 /images/,繼續(xù)往下,會(huì)發(fā)現(xiàn) ^~ 存在[ configuration F ] } location /images/abc {# 最長(zhǎng)字符匹配到 /images/abc,繼續(xù)往下,會(huì)發(fā)現(xiàn) ^~ 存在# F與G的放置順序是沒(méi)有關(guān)系的[ configuration G ] } location ~ /images/abc/ {# 只有去掉 config D 才有效:先最長(zhǎng)匹配 config G 開(kāi)頭的地址,繼續(xù)往下搜索,匹配到這一條正則,采用[ configuration H ] } location ~* /js/.*/\.js

      

      

      

      

    • 已=開(kāi)頭表示精確匹配
      如 A 中只匹配根目錄結(jié)尾的請(qǐng)求,后面不能帶任何字符串。
    • ^~?開(kāi)頭表示uri以某個(gè)常規(guī)字符串開(kāi)頭,不是正則匹配
    • ~ 開(kāi)頭表示區(qū)分大小寫(xiě)的正則匹配;
    • ~* 開(kāi)頭表示不區(qū)分大小寫(xiě)的正則匹配
    • / 通用匹配, 如果沒(méi)有其它匹配,任何請(qǐng)求都會(huì)匹配到

    順序不等于優(yōu)先級(jí):

    (location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/)

    上面的匹配結(jié)果。按照上面的location寫(xiě)法,以下的匹配示例成立:

    • / -> config A
      精確完全匹配,即使/index.html也匹配不了
    • /downloads/download.html -> config B
      匹配B以后,往下沒(méi)有任何匹配,采用B
    • /images/1.gif -> configuration D
      匹配到F,往下匹配到D,停止往下
    • /images/abc/def -> config D
      最長(zhǎng)匹配到G,往下匹配D,停止往下
      你可以看到 任何以/images/開(kāi)頭的都會(huì)匹配到D并停止,FG寫(xiě)在這里是沒(méi)有任何意義的,H是永遠(yuǎn)輪不到的,這里只是為了說(shuō)明匹配順序
    • /documents/document.html -> config C
      匹配到C,往下沒(méi)有任何匹配,采用C
    • /documents/1.jpg -> configuration E
      匹配到C,往下正則匹配到E
    • /documents/Abc.jpg -> config CC
      最長(zhǎng)匹配到C,往下正則順序匹配到CC,不會(huì)往下到E

    實(shí)際使用建議

    所以實(shí)際使用中,個(gè)人覺(jué)得至少有三個(gè)匹配規(guī)則定義,如下:

    #直接匹配網(wǎng)站根,通過(guò)域名訪問(wèn)網(wǎng)站首頁(yè)比較頻繁,使用這個(gè)會(huì)加速處理,官網(wǎng)如是說(shuō)。 #這里是直接轉(zhuǎn)發(fā)給后端應(yīng)用服務(wù)器了,也可以是一個(gè)靜態(tài)首頁(yè) # 第一個(gè)必選規(guī)則 location = / {proxy_pass http://tomcat:8080/index } # 第二個(gè)必選規(guī)則是處理靜態(tài)文件請(qǐng)求,這是nginx作為http服務(wù)器的強(qiáng)項(xiàng) # 有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用 location ^~ /static/ {root /webroot/static/; } location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/; } # 第三個(gè)規(guī)則就是通用規(guī)則,用來(lái)轉(zhuǎn)發(fā)動(dòng)態(tài)請(qǐng)求到后端應(yīng)用服務(wù)器 # 非靜態(tài)文件請(qǐng)求就默認(rèn)是動(dòng)態(tài)請(qǐng)求,自己根據(jù)實(shí)際把握 # 畢竟目前的一些框架的流行,帶.php,.jsp后綴的情況很少了 location / {proxy_pass http://tomcat:8080/ }

      

      

    轉(zhuǎn)載于:https://www.cnblogs.com/cangqiongbingchen/p/6728433.html

    總結(jié)

    以上是生活随笔為你收集整理的nginx location 在配置中的优先级的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。