location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。因此本章就来讲述一下nginx的location匹配规则,主要包括如下两个方面:
1. Nginx的location语法
普通匹配:
location = URI { configuration } # 精确匹配
location ^~ URI { configuration } # 非正则匹配,表示URI以某个常规字符串开头
location [space] URI { configuration} # 前缀匹配, 匹配后,继续更长前缀匹配和正则匹配。
正则匹配
location ~ URI { configuration } # 区分大小写匹配
location ~* URI { configuration } # 不区分大小写匹配
location !~ URI { configuration } # 区分大小写不匹配
location !~* URI { configuration } # 不区分大小写不匹配
内部重定向
location @name { configuration } # 定义一个location,用于处理内部重定向
注: 前缀匹配时,Nginx 不对url做编码,因此请求为/static/20%/aa
,可以被规则 ^~ /static//aa
匹配到(注意是空格)
各个匹配之间的优先级顺序为:
1.1 location正则表达式书写示例
1) 等号( = )
表示完全匹配规则才执行操作
location = /index{
[configuration A]
}
当URL为http://{domain-name}/index
时,才会执行配置中操作。
2) 波浪号 ( ~ )
表示执行正则匹配,但区分大小写
location ~ /page/\d{1,2} {
[ configuration B ]
}
URL为http://{domain-name}/page/1
匹配结尾数字为1~99时,配置生效
3) 波浪号与星号( ~* )
表示执行正则匹配,但不区分大小写
location ~* /\.(jpg|jpeg|gif)$ {
[ configuration C ]
}
匹配所有URL以.jpg
、.jpeg
、.gif
结尾时, 配置生效
4) 脱字符与波浪号( ^~ )
表示普通字符匹配,前缀匹配有效,配置生效
location ^~ /images/ {
[ cofigurations D ]
}
URL为http://{domain_name}/images/1.gif
时,配置生效。
5) @符号
定义一个location,用于处理内部重定向
location @error {
proxy_pass http://error;
}
error_page 404 @error;
6) 一个综合示例
2. pcre正则表达式
下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为:
另外,我们再介绍几个模式修正符(Pattern Modifiers)。模式修正符在忽略大小写、匹配多行中使用特别多,掌握了这一个修正符,往往能解决我们遇到的很多问题
例如下面可以匹配以Hel开头的单词(忽略大小写):
char src[] = "hello,world, I am looking a job";
char pattern[] = "(?i)\\AHel";
2.1 实例
[参看]
-
nginx配置location总结及rewrite规则写法
-
nginx location配置详细解释
-
Nginx之Location配置详解(Location匹配顺序)
-
正则表达式