打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
nginx location匹配规则 – 运维与架构

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条规则的结果。

 

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
location  = / {
  # 只匹配"/".
  [ configuration A ]
}
location  / {
  # 匹配任何请求,因为所有请求都是以"/"开始
  # 但是更长字符匹配或者正则表达式匹配会优先匹配
  [ configuration B ]
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
  [ configuration C ]
}
location ~* .(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg结尾的请求.
  # 但是所有 /images/ 目录的请求将由 [Configuration C]处理.  
  [ configuration D ]
}

请求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.nginx.cn/115.html

除非注明,本站文章均为: nginx.cn原创,转载请注明本文地址:http://www.nginx.cn/115.html

--完--

分类: nginx 标签: , ,
  1. 2017年3月18日19:43 | #1

    请教一个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 进入

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

    @leo.xie
    需要转义表示图片后缀,不转义的情况下点可以匹配任何字符,例如,会匹配agif等样式的字符串

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

    @周葛亮
    这个解释的很好

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

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

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

    Location处理逻辑
    1.用uri测试所有的prefix string;
    2.Uri精确匹配到=定义的loacation,使用这个location,停止搜索;
    3.匹配最长prefix string,如果这个最长prefix string带有^~修饰符,使用这个location,停止搜索,否则:
    4.存储这个最长匹配;
    5.然后匹配正则表达;
    6.匹配到第一条正则表达式,使用这个location,停止搜索;
    7.没有匹配到正则表达式,使用#4步存储的prefix string的location。

  6. 2015年10月10日06:25 | #9

    嘿嘿~奸笑中!

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

    good,好东西

  8. 过路人
    2015年4月7日15:52 | #11

    博主,希望你把他灭了,看着这些抄袭狗、败类就来火。
    http://blog.chinaunix.net/uid-29179844-id-4761399.html

    • 热热为
      2015年5月26日13:07 | #12

      你如何知道博主不是转载别人的?

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

      打着原创的旗号抄袭是最可耻的!

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

    有吗 我发现我配置好的规则一但添加了wp supercache的规则后 我配的就失效了,不论是在前还是在后

    能帮忙看下么~

  10. 2014年12月14日12:07 | #15

    站长,为什么我配置的nginx拦截了好多东西?

  11. 2014年6月12日14:52 | #17

    站长大神,请问location匹配首页应该怎么写啊、想做个首页301,只跳转首页其它的不动

  12. 2014年5月29日17:33 | #18

    你好,内网可以访问,外网IP访问不了,但是用firebug调试可看到nginx 1.4.0版本等信息,说明是已被nginx 监听到,报404错误,请问是不是配置的问题?如何允许内网和外网都可以访问?

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

    写的真混乱

    • 有课
      2014年7月3日11:59 | #20

      你可以先提高点智商再来看

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

    问好后面的参数是匹配不到的,需要借助 $query_string去判断http://www.nginx.cn/142.html,这篇文章可以看看

  15. 2013年9月11日17:17 | #22

    你好,我的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 | #23

      我觉得用相对路径应该可以吧../a.php, $document_root是针对nginx来说的,并不是针对php去如何解析

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

    我目前是这样写的,可是不管用,

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

    请帮忙。

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

      已经回复你了,有问题可以加群找我

  17. 2012年9月12日15:57 | #27

    你好,请教一个问题,请帮忙, 我有一个需求是: http://www.a.com/?links893438934**** 后面还有很长链接, 要禁止根目录下任何以 ?links 开头的链接,非常感谢了!

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

      看一下http://www.nginx.cn/142.html 应该就知道问题了
      if ( $query_string ~* "links.*" ){
      return 404;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Nginx的location匹配规则
nginx.conf配置文件解析(http、server、location proxy
nginx loction语法详解
Nginx的location配置规则梳理
Nginx 关于 location 的匹配规则详解
nginx配置location [=|~|~*|^~] /uri/ { … }用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服