Nginx中location规则详解

目录

  • 一.前言
  • 二.location语法
    • 1.语法规则
  • 三.优先级测试
    • 1.location参数匹配解释
    • 2.测试优先级
    • 3.结论

一.前言

  • Location 指令是http模块中的配置指令之一,Location是Nginx中的块级指令(block directive),通过配置Location指令块,可以决定客户端发过来的请求URI如何处理(是映射到本地文件还是转发出去)及被哪个location处理

  • Nginx的location就相当于url路由,Nginx根据location的配置来决定究竟如何处理一个请求

二.location语法

1.语法规则

  1. = 开头表示精确匹配
  2. ^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可(非正则)
  3. ~ 开头表示区分大小写的正则匹配
  4. ~* 开头表示不区分大小写的正则匹配
  5. / 通用匹配,任何请求都会匹配到

三.优先级测试

1.location参数匹配解释

1.1 “=” 精确匹配
内容要求表达式完全一致才匹配成

location = /abc/ {
  .....
 }       
# 只匹配http://abc.com/abc
#http://abc.com/abc [匹配成功]
#http://abc.com/abc/index [匹配失败]

1.2 “^~” 表示普通字符串匹配上以后不再进行正则匹配

location ^~ /index/ {
  .....
}
#以 /index/ 开头的请求,都会匹配上
#http://abc.com/index/index.page  [匹配成功]
#http://abc.com/error/error.page [匹配失败]

1.3 “~” 执行正则匹配,区分大小写

location ~ /Abc/ {
  .....
}
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配失败]

1.4 “~*” 执行正则匹配,忽略大小写

location ~* /Abc/ {
  .....
}
# 则会忽略 uri 部分的大小写
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配成功]

1.5 “/” 不加任何规则时,默认是大小写敏感,前缀匹配

location /index/ {
  ......
}
#http://abc.com/index  [匹配成功]
#http://abc.com/index/index.page  [匹配成功]
#http://abc.com/test/index  [匹配失败]
#http://abc.com/Index  [匹配失败]
# 匹配到所有uri

2.测试优先级

default_type	:默认类型
return 			:返回
text/html		:表示使用html htm shtml解析
return 200 "location /";	:返回给浏览器200状态码,并且打印出"location /"

server区域

server {
   listen 80;
   server_name   location.com;
   location /  {
      default_type  text/html;
      return 200 "location /";
   }
   
   location = / {
     default_type  text/html;
     return 200 "location =";
   }
   
  # location ^~ / {        # 先注释,否则校验失败,无法重新加载
  #   default_type  text/html;
  #   return 200 "location ^~";
  # }

    location ~ /  {
      default_type  text/html;
      return 200 "location ~";
   }
   
    location ~* / {
     default_type  text/html;
     return 200 "location ~*";
   }
}

优先级

# 优先级最高的符号 =
[root@tdm ~]# curl  location.com
location =

# 注释掉精确匹配,重启nginx
[root@tdm ~]# curl  location.com
location ^~

# 注释掉^~,重启nginx
[root@tdm ~]# curl  location.com
location ~

#注释掉~,重启nginx
[root@tdm ~]# curl  location.com
location ~*

3.结论

匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则表达式 4
/ 通用匹配,任何请求都会匹配到 5

你可能感兴趣的:(Nginx,nginx,网络,运维)