首頁 > nginx > nginx location匹配規則

nginx location匹配規則

2012年8月29日 發表評論 閱讀評論

location匹配命令

~ ? ? ?#波浪線表示執行一個正則匹配,區分大小寫
~*??? #表示執行一個正則匹配,不區分大小寫
^~??? #^~表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄
= ? ? ?#進行普通字符精確匹配
@ ? ? #"@" 定義一個命名的 location,使用在內部定向時,例如?error_page,?try_files

location 匹配的優先級(與location在配置文件中的順序無關)
= 精確匹配會第一個被處理。如果發現精確匹配,nginx停止搜索其他匹配。
普通字符匹配,正則表達式規則和長的塊規則將被優先和查詢匹配,也就是說如果該項匹配還需去看有沒有正則表達式匹配和更長的匹配。
^~ 則只匹配該規則,nginx停止搜索其他匹配,否則nginx會繼續處理其他location指令。
最后匹配理帶有"~"和"~*"的指令,如果找到相應的匹配,則nginx停止搜索其他匹配;當沒有正則表達式或者沒有正則表達式被匹配的情況下,那么匹配程度最高的逐字匹配指令會被使用。

location 優先級官方文檔

  1. Directives with the = prefix that match the query exactly. If found, searching stops.
  2. All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
  3. Regular expressions, in order of definition in the configuration file.
  4. If #3 yielded a match, that result is used. Else the match from #2 is used.
  1. =前綴的指令嚴格匹配這個查詢。如果找到,停止搜索。
  2. 所有剩下的常規字符串,最長的匹配。如果這個匹配使用^?前綴,搜索停止。
  3. 正則表達式,在配置文件中定義的順序。
  4. 如果第3條規則產生匹配的話,結果被使用。否則,使用第2條規則的結果。

 

例如

請求URI例子:

  • / -> 符合configuration A
  • /documents/document.html -> 符合configuration B
  • /images/1.gif -> 符合configuration C
  • /documents/1.jpg ->符合 configuration D

@location 例子
error_page 404 = @fetch;

location @fetch(
proxy_pass http://fetch;
)

轉載請保留:http://www.52587952.com/115.html

除非注明,本站文章均為: nginx.cn原創,轉載請注明本文地址: http://www.52587952.com/115.html

--完--

分類: nginx 標簽: , ,
  1. moming
  2. moming
    2018年3月13日16:22 | #2

    nginx location 正則是不是不能匹配#號啊? 下面寫法都不行
    location ~* ^/#/[^\.]+\/abc/
    location ~* ^/\#/[^\.]+\/abc/
    把#換成@就沒問題,求助。。。

  3. 2017年3月18日19:43 | #3

    請教一個Nginx配置問題:
    我的根目錄下有index.php , usercp.php ,admincp.php 三個文件。
    我想讓
    http://xxx.com/admin/xx =>這樣的URL從admincp.php進入
    http://xxx.com/user/xx =>這樣的URL從usercp.php進入
    http://xxx.com/xxx =>最后默認從index.php 進入

  4. mood
    2017年2月15日09:40 | #4

    @leo.xie
    需要轉義表示圖片后綴,不轉義的情況下點可以匹配任何字符,例如,會匹配agif等樣式的字符串

  5. mood
    2017年2月15日09:35 | #5

    @周葛亮
    這個解釋的很好

  6. 2017年1月22日11:01 | #6

    location ~* .(gif|jpg|jpeg)$ 這句話,是否要修改成 location ~* \.(gif|jpg|jpeg)$

  7. 2016年4月11日18:08 | #7

    Location處理邏輯
    1.用uri測試所有的prefix string;
    2.Uri精確匹配到=定義的loacation,使用這個location,停止搜索;
    3.匹配最長prefix string,如果這個最長prefix string帶有^~修飾符,使用這個location,停止搜索,否則:
    4.存儲這個最長匹配;
    5.然后匹配正則表達;
    6.匹配到第一條正則表達式,使用這個location,停止搜索;
    7.沒有匹配到正則表達式,使用#4步存儲的prefix string的location。

  8. 2015年10月10日06:25 | #11

    嘿嘿~奸笑中!

  9. 2015年5月1日12:52 | #12

    good,好東西

  10. 過路人
    2015年4月7日15:52 | #13

    博主,希望你把他滅了,看著這些抄襲狗、敗類就來火。
    http://blog.chinaunix.net/uid-29179844-id-4761399.html

    • 熱熱為
      2015年5月26日13:07 | #14

      你如何知道博主不是轉載別人的?

    • 莫小醉
      2015年11月20日12:54 | #15

      打著原創的旗號抄襲是最可恥的!

  11. sinsky
    2015年1月4日14:04 | #16

    有嗎 我發現我配置好的規則一但添加了wp supercache的規則后 我配的就失效了,不論是在前還是在后

    能幫忙看下么~

  12. 2014年12月14日12:07 | #17

    站長,為什么我配置的nginx攔截了好多東西?

  13. 2014年6月12日14:52 | #19

    站長大神,請問location匹配首頁應該怎么寫啊、想做個首頁301,只跳轉首頁其它的不動

  14. 2014年5月29日17:33 | #20

    你好,內網可以訪問,外網IP訪問不了,但是用firebug調試可看到nginx 1.4.0版本等信息,說明是已被nginx 監聽到,報404錯誤,請問是不是配置的問題?如何允許內網和外網都可以訪問?

  15. sh
    2013年12月2日17:15 | #21

    寫的真混亂

    • 有課
      2014年7月3日11:59 | #22

      你可以先提高點智商再來看

  16. 2013年9月11日20:16 | #23

    問好后面的參數是匹配不到的,需要借助 $query_string去判斷http://www.52587952.com/142.html,這篇文章可以看看

  17. 2013年9月11日17:17 | #24

    你好,我的nginx虛擬主機的root指令下,根下程序文件是否可以包括$document_root父目錄文件。
    ================================
    比如:
    指令root /data/wwwroot/web1
    有以下兩個程序
    /data/wwwroot/web1/index.php
    /data/wwwroot/a.php
    問題:
    index.php中是否可以包括a.php?

    • 2013年9月11日20:23 | #25

      我覺得用相對路徑應該可以吧../a.php, $document_root是針對nginx來說的,并不是針對php去如何解析

  18. 2012年9月12日16:18 | #27

    我目前是這樣寫的,可是不管用,

    location ~ ^/?links.* {
    deny all;
    }

    請幫忙。

    • mood
      2012年9月14日14:48 | #28

      已經回復你了,有問題可以加群找我

  19. 2012年9月12日15:57 | #29

    你好,請教一個問題,請幫忙, 我有一個需求是: http://www.a.com/?links893438934**** 后面還有很長鏈接, 要禁止根目錄下任何以 ?links 開頭的鏈接,非常感謝了!

    • mood
      2012年9月14日14:48 | #30

      看一下http://www.52587952.com/142.html 應該就知道問題了
      if ( $query_string ~* "links.*" ){
      return 404;
      }

  1. 2012年12月25日22:45 | #1
  2. 2013年6月19日14:47 | #2
  3. 2013年8月18日15:30 | #3
  4. 2013年10月10日22:00 | #4
  5. 2013年11月22日10:28 | #5
  6. 2014年3月11日15:38 | #6
  7. 2014年8月14日16:35 | #7
  8. 2014年11月5日16:29 | #8
  9. 2015年1月30日17:02 | #9
  10. 2015年3月3日20:00 | #10
  11. 2015年8月19日06:08 | #11
  12. 2016年1月20日14:15 | #12
  13. 2016年6月16日10:47 | #13
  14. 2016年12月20日01:02 | #14
  15. 2016年12月21日05:17 | #15
  16. 2017年3月16日16:41 | #16
  17. 2017年9月27日16:42 | #17
  18. 2017年11月14日16:38 | #18
  19. 2018年6月23日06:29 | #19

极速快乐十分助手