nginx的location详解

一、location匹配规则
语法规则:
location [=|~|~*|^~] /uri/ { … }
=精确匹配
~区分大小写的正则匹配
~*不区分大小写的正则匹配
^~匹配uri前半部分。
location = /uri=开头表示精确匹配,只有完全匹配上才能生效。
location ^~ /uri^~ 开头对uri路径进行前缀匹配,并且在正则之前。
location ~ pattern~开头表示区分大小写的正则匹配。
location ~* pattern~*开头表示不区分大小写的正则匹配。
location /uri不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location /通用匹配,任何未匹配到其它location的请求都会匹配到。
多个location配置的情况下匹配顺序为:
 首先是=匹配,如果匹配成功,则停止其他匹配。其次是普通字符串匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)。 其次正则表达式匹配,按照配置文件里的顺序,成功就停止其他匹配。最后是 / 通用匹配。
注意点:
 匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。
例子,有如下匹配规则:

   location = / { 规则A }  
   location = /login { 规则B }  
   location ^~ /static/ { 规则C }  
   location ~ \.(gif|jpg|png|js|css)$ { 规则D }  
   location ~* \.png$ { 规则E }  
   location !~ \.xhtml$ { 规则F }  
   location !~* \.xhtml$ { 规则G }  
   location / { 规则H }  

那么产生的效果如下:
 访问根目录/, 比如http://localhost/ 将匹配规则A
 访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
 访问 http://localhost/static/a.html 将匹配规则C
 访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而 http://localhost/static/c.png 则优先匹配到 规则C
 访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。
 访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML 不会匹配规则G,因为不区分大小写。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值