nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx配置location

Nginx配置location匹配顺序详细总结

作者:Young丶

这篇文章主要介绍了Nginx配置location匹配顺序详解,Nginx是十分轻量级的HTTP服务器,Nginx凭借其稳定性、低资源消耗、简单配置和丰富的功能,从十多年前名不见经传的Web服务器软件,发展到如今能够跟Apache匹敌的地位,需要的朋友可以参考下

location 匹配规则:

location 路径正则匹配:

符号说明
~正则匹配,区分大小写
~*正则匹配,不区分大小写
^~普通字符匹配,如果该选项匹配,则,只匹配该选项,不再向下匹配其他选项
=普通字符匹配,精确匹配
@定义一个命名的 location,用于内部定向,例如 error_page,try_files

location匹配优先级顺序

1.精确匹配

  *   `=` 前缀指令匹配,如果匹配成功,则停止其他匹配

2.普通字符匹配

  * 普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)

3.正则匹配

  * 正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配

4.默认匹配

  * 如果第三步中有匹配成功,则使用该结果,否则使用第二步结果

注意点

匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。

另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个匹配的正则表达式将停止搜索。

一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用=前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用^~前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

匹配模式及顺序

实验案例

如将#1注释,#2打开,浏览器输入//localhost/helloworld/test,返回603。

注:#1和#2不能同时打开,如同时打开,启动nginx会报nginx: [emerg] duplicate location “/helloworld”…,因为这两个都是普通字符串。

location ^~ /helloworld { #1 
	return 601;
} 
#location /helloworld { #2 
# 	return 602;
#}
 location ~ /helloworld { 
 		return 603;
  } 

浏览器输入//localhost/helloworld/test/a.html,返回601。

浏览器输入//localhost/helloworld/a.html,返回602。

location /helloworld/test/ {        #1
    return 601;
}
location /helloworld/ {                #2
    return 602;
}

浏览器输入//localhost/helloworld/test/a.html,返回602;

将#2和#3调换顺序,浏览器输入//localhost/helloworld/test/a.html,返回603

location /helloworld/test/ { #1
return 601;
}
location ~ /helloworld { #2
return 602;
}
location ~ /helloworld/test { #3
return 603;
}

到此这篇关于Nginx配置location匹配顺序详细总结的文章就介绍到这了,更多相关Nginx配置location内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文