Nginx-6、7、8-Location详解

location 语法

location 有”定位”的意思, 根据Uri来进行不同的定位.
  • 在虚拟主机的配置中,是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上.
    比如, 碰到.php, 如何调用PHP解释器? –这时就需要location
    location 的语法
    location [=|~|~*|^~] patt {
    }

    • = 开头表示精确匹配
    • ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
    • ~ 开头表示区分大小写的正则匹配
    • ~* 开头表示不区分大小写的正则匹配
    • !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
    • / 通用匹配,任何请求都会匹配到。
    • 中括号可以不写任何参数,此时称为一般匹配
      也可以写参数
      因此,大类型可以分为3种
      • location = patt {} [精准匹配]
      • location patt{} [一般匹配]
      • location ~ patt{} [正则匹配]

如何发挥作用?:

首先看有没有精准匹配,如果有,则停止匹配过程.

location = patt {
    config A
}
#如果 $uri == patt,匹配成功,使用configA
location = / {
             root   /var/www/html/;
             index  index.htm index.html;
        }

  location / {
            root   /usr/local/nginx/html;
            index  index.html index.htm;
  }
  • 如果访问  http://xxx.com/
    定位流程是 
    1. 精准匹配中 ”/” ,得到index页为  index.htm
    2. 再次访问 /index.htm , 此次内部转跳uri已经是”/index.htm” ,
      根目录为/usr/local/nginx/html
    3. 最终结果,访问了 /usr/local/nginx/html/index.htm

  • 再来看,正则
location / {
            root   /usr/local/nginx/html;
            index  index.html index.htm;
        }

location ~ image {
           root /var/www/image;
           index index.html;
}

如果我们访问 http://xx.com/image/logo.png
此时, “/” 与”/image/logo.png” 匹配
同时,”image”正则 与”image/logo.png”也能匹配,谁发挥作用?
正则表达式的成果将会使用.

图片真正会访问 /var/www/image/logo.png


location / {
             root   /usr/local/nginx/html;
             index  index.html index.htm;
         }

location /foo {
            root /var/www/html;
            index index.html;
}

我们访问 http://xxx.com/foo
对于uri “/foo”, 两个location的patt,都能匹配他们
即 ‘/’能从左前缀匹配 ‘/foo’, ‘/foo’也能左前缀匹配’/foo’,
此时, 真正访问 /var/www/html/index.html
原因:’/foo’匹配的更长,因此使用之.;


更多实例

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
}

产生的效果如下:


总结

  • location 命中过程

    • 先判断精准命中,如果命中,立即返回结果并结束解析过程
    • 判断普通命中,如果有多个命中,立即返回结果并结束解析过程

      记录但不结束,已命中结果最长的为准

    • 继续判断正则表达式的解析结果,按配置里的正则表达式顺序为准,由上到下开始屁屁,一旦匹配成功1个,立即返回结果,并结束解析过程

    • 普通命中,顺序无所谓,是因为按照命中的长短来确定的
    • 正则命中,顺序有所谓,是因为从前往后命中的
  • 实际使用中,个人觉得至少有三个匹配规则定义

#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    proxy_pass http://tomcat:8080/index
}

# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了

location / {
    proxy_pass http://tomcat:8080/
}

nginx location配置详细解释

http://outofmemory.cn/code-snippet/742/nginx-location-configuration-xiangxi-explain

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值