Nginx location 深入解析

Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅是通过查找匹配文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令,用于访问的URL匹配,而在这个location配置的每个指令将会启动不同的模块去完成相应的工作

默认nginx.conf配置文件中至少存在一个location / ,即表示客户端浏览器请求的URL为域名+/,如果location /newindex/,则表示客户端请求的URL为域名+/newindex/,常见的location匹配URL的方式如下:

  • =:字面精准匹配。
  • ^~:最大前缀匹配
  • /:不带任何前缀
  • ~:大小写相关的正则匹配
  • ~*:大小写无关的正则匹配
  • @:location内部重定向的变量

其中location =、^~、/属于普通字符串匹配,location ~、 ~*属于正则表达式匹配,location优先级与其在nginx.conf配置文件中的先后顺序无关。

  • location = 精确匹配会第一个被处理,如果发现精确匹配,Nginx停止搜索其他任何location的匹配。
  • 普通字符匹配,正则表达式规则和完整的URL规则将被优先查询匹配,^~为最大前缀匹配,如果匹配该规则,Nginx则停止搜索其他任何location的匹配,否则Nginx会继续处理其他的location指令。
  • 正则匹配“~”和 “~*”,如果找到相应的匹配,则Nginx停止搜索任何其他location的匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么那么匹配程度最高的逐字匹配指令会被使用。

location规则匹配优先级总结如下:
(location =)> (location 完整路径) > (location ^~路径) > (location ~或 ~*正则顺序) > (location 部分起始路径) > (location /)

以下为Nginx location规则案例演示:

location = / {
[ configuration L1 ]
#只会匹配 /,优先级比location /低
}

location = /index.html {
[ configuration L2 ]
#只会匹配/index.html,优先级最高
}

location / {
[ configuration L3 ]
#匹配任何请求,因为所有请求都是以"/" 开始,但是更长字符匹配或者正则表达式会优先匹配,优先级最低
}

location = /images/ {
[ configuration L4 ]
#匹配任何以/images/开始的请求,并停止匹配其他的 location
}

location ~* .(html|txt|gif|jpg|jpeg)${
[ configuration L5 ]
#匹配以html、txt、gif、jpg、jpeg结尾的URL文件请求,但是所有/images/目录的请求将由[ configuration L4 ] 处理
}

浏览器对www.test.com发起HTTP request URI 案例与location 规则案例匹配如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值