nginx location介绍

nginx location配置看看文档都会,主要是记不住,写下来方便查询。主要是优先级要搞清楚,不然工程大了,匹配的莫名其妙。本文按优先级依次介绍。

总述:精确匹配(=) > 字符串打头匹配(^~)  >  正则匹配(~~*) >否定式正则匹配!~!~*) > 通用匹配/)。两种正则当中,区分大小写的优先级高,也就是不带*的优先级高

1.精确匹配

= 精确匹配
location = / {
   #精确匹配访问网站根目录
}
location = /login {
   #精确匹配http://xxx.com/login
}
精确匹配优先级最高,匹配是唯一的

2.以什么打头

^~ 表示以什么打头,关键在于正则的开头符 ^
location ^~ /static/ {
   #以/static打头,比如 http://xxx.com/static/jQuery.js
}

3. 正则匹配,区分大小写优先于不区分大小写

~ 区分大小写的正则, ~* 不区分大小的正则
location ~ \.png {
    #以png结尾,比如比如 http://xxx.com/img/a.png
}
location ~* \.png$ {
    #以png或者PNG或者Png等等结尾,比如比如 http://xxx.com/img/a.pNg。如果是png结尾,会优先匹配上面一条。
}

4.排除法的正则,同样区分大小写优先于不区分大小写

!~ 区分大小写的排除法正则, !~*不区分大小的排除法正则

排除法正则是指,url与该正则不匹配,才算合格,才能进入此location。相当于正则匹配的否定写法。不建议实际工程中使用,毕竟肯定能表达的干嘛写否定式呢?很不利于排除问题。小心装逼不成,坑了自己的KPI。
location !~ \.png$ {
   #匹配“以png结尾”失败,进入location,那就情况多了去了,只要不以png结尾就行
}
location !~* \.xhtml$ {
   #匹配“以png或者PNG或者PnG等等”结尾失败,进入location,那情况也多了去了,只要不是PNG的各种大小写变体就行
}

5.通用匹配

/ 通用匹配,任何请求都会匹配到。
location / {
   #用来兜底的,当前面其他所有的规则都不满足条件,就归入这个通用的
}

6.另类字符串匹配

location  /prefix/mid/ {
    # 啥也不写,不属于以上任何一种
}
首先,不建议写这种,原因有点深:对于location,分为两大类:官方英文说法是 location using literal stringslocation using regular expressions,我们就字面翻译为字符串location和正则location.总体上字符串location优先于正则location。

字符串location不使用=或者^~,nginx会采用“最大前缀匹配”原则在字符串location里面选出匹配度最高的一个做为临时选择结果Temp,然后继续在正则location中匹配,如果匹配到某个正则location,则立即停止并且最终使用该正则location,如果没有匹配到正则location,那么就选择临时结果Temp(此结果由“最大前缀匹配”原则产生,与location编辑顺序无关)。

那么字符串location选择出了最大前缀匹配临时结果,能不能停止,不在考虑正则呢?可以。就是使用=或者^~。那就回到了上面讲的几类。

7.“@”前缀

server {
    listen 80;
    server_name  localhost;

    location  / {
        root   html;
        index  index.html index.htm;
        allow all;
    }

    #error_page 404 http://www.error.com # 直接这样是不允许的
    error_page 404 = @fallback;

    location @fallback {
        proxy_pass http://www.error.com;
    }

}

error_page 404指令能捕获404错误,并且转发给fallback


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值