一.常用的Nginx正则表达式
^
:匹配输入字符串的起始位置
$
:匹配输入字符串的结束位置
*
: 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+
:匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
?
:匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
.
:匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\
:将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“$”则匹配“$”
\d
:匹配纯数字
{n}
:重复 n 次
{n,}
:重复 n 次或更多次
{n,m}
:重复 n 到 m 次
[ ]
:定义匹配的字符范围
[c]
:匹配单个字符 c
[a-z]
:匹配 a-z 小写字母的任意一个
[a-zA-Z0-9]
:匹配所有大小写字母或数字
()
:表达式的开始和结束位置
|
:或运算符
二.location
1.location的分类
- 精准匹配: location = / { }
- 一般匹配: location / { }
- 正则匹配: location ~/ { }
2.location常用的匹配规则:
=
:进行普通字符精确匹配,也就是完全匹配。
^~
:表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。
~
:区分大小写的匹配。
~*
:不区分大小写的匹配。
!~
:区分大小写的匹配取非。
!~*
:不区分大小写的匹配取非。
3.location优先级
- 首先精确匹配:
=
- 其次前缀匹配
:^~
- 其次是按文件中顺序的正则匹配
~
或~*
- 然后匹配不带任何修饰的前缀匹配
- 最后是交给
/
通用匹配
4.location示例说明
(1)location = / {
}
=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。若 location /abc,则即匹配/abc 、/abcd/ 同时也匹配 /abc/。
(2)location / {
}
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,
但若后面是正则表达式会和最长字符串优先匹配(最长匹配)
(3)location /documents/ {
}
匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条
(4)location /documents/abc {
}
匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条
(5)location ^~ /images/ {
}
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条
(6)location ~* \.(gif|jpg|jpeg)$ {
}
匹配所有以 gif、jpg或jpeg 结尾的请求
然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则
(7)location /images/abc {
}
最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在
(8)location ~ /images/abc {
}
匹配以/images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条
(9)location /images/abc/1.html {
}
匹配/images/abc/1.html 文件,如果和正则 ~ /images/abc/1.html 相比,正则优先级更高
优先级总结:
(<