Nginx location规则匹配
Posted zhishaofei3
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx location规则匹配相关的知识,希望对你有一定的参考价值。
^~ 标识符匹配后面跟-一个字符串。匹配字符串后将停止对后续的正则表达式进行匹配,如location ^~ /images/ , 在匹配了/images/这个字符串后就停止对后续的正则匹配
= 精准匹配,如location=/,只会匹配url为/的请求。
~ 区分大小写的匹配。
~* 不区分大小写的匹配。
!~ 对区分大小写的匹配取非。
!~* 对不区分大小写的匹配取非。
/ 通用匹配,如果没有其它匹配,任何请求都会被匹配到
/ 通用匹配,如果没有其它匹配,任何请求都会被匹配到
匹配顺序优先级:
(location =)> (location 完整路径)> (location ^~ 路径) > (location ~,~*正则顺序) >(location 部分起始位置) > (/)
2、正则表达式
*:重复前面的字符0次或多次
?:重复前面的字符0次或1次
+:重复前面的字符1次或多次
.:匹配除换行符以外的任意一个字符
(a|b):匹配a或b
^:以...开头
$:以...结尾
{n}:重复前面的字符n次
{n,}:重复前面的字符n次或更多次
{n,m}:重复前面的字符n-m次
*?:重复前面的字符0次或多次,但尽可能少重复
+?:重复前面的字符1次或多次,但尽可能少重复
??:重复前面的字符0次或1次,但尽可能少重复
{n,m}?:重复前面的字符n-m次,但尽可能少重复
{n}?:重复前面的字符n次以上,但尽可能少重复
3、正则表达式补充
W:匹配任意不是字母,数字,下划线,汉字的字符(特殊符号)
S:匹配任意不是空白符的字符
D:匹配任意非数字的字符
B:匹配任意不是单词开头或结尾的位置
[a]:匹配单个字符a
[a-z]:匹配a-z小写字符的任意一个
[^a]:匹配除了a以外的任意字符
[^abc]:匹配除了abc这几个字母以外的任意字符
4、Nginx location应用规则
先写一个location,后面匹配挑任意一个,加url的地址(网页路径)花括号里写最终要处理的动作
location [=|~|~*|^~|!~|!~*] /url/{...}
默认值:no
使用字段:server
location参数根据URL的不同需求来进行匹配,可以使用字符串与正则表达式匹配
例:location ~* .*.jsp$ {
proxy_pass http://tomcat_server;
}
(1)
http://www.a.com/
location = / {
#精准匹配 / ,主机名后面不能带任何的字符串
[configuration A ]
}
(2)
location / {
#因为所有的地址都以 / 开头,所以这条规则将匹配到所有的请求
#但是正则和最长字符串会优先匹配
[configuration B ]
}
(3)
location / documents/ {
#匹配任意以documents开头的地址,匹配符合以后,还要继续往下搜索
#只有后面的正则表达式没有匹配到时,才会采用这一条
[configuration C ]
}
(4)
location ~ / documents/Abc {
#匹配任意以documents开头的地址,匹配符合以后,还要继续往下搜索
#只有后面的正则表达式没有匹配到时,才会采用这一条
[configuration CC ]
}
(5)
location ^~ /images/ {
#匹配任意以images开头的地址,匹配符合以后,还要继续往下搜索
[configuration D ]
}
(6)
location ~*.(gif|jpg|jpeg) {
#匹配所有以gif,jpg或jpeg结尾的请求
#然而,所有的请求/images/ 下的图片会被config D 处理,因为 ^ ~ 到达不了这一条正则
[configuration E ]
}
(7)
location /images/ {
#字符匹配到 /images/,继续往下,会发现 ^~ 存在
[configuration F ]
}
(8)
location /images/abc {
#最长字符串匹配到 /images/abc,继续往下,会发现 ^~ 存在
[configuration G ]
}
6、实验(需要两台虚拟机)
第一台虚拟机确保安装nginx
第二台虚拟机上安装确保搭建好LAMP
(1)在第二台虚拟机上:[root@localhost ~]# rpm -q nfs-utils rpcbind //查看有没有安装nfs-utils rpcbind这两个软件包
[root@localhost ~]# mkdir /wwwroot //创建一个文件
[root@localhost ~]# vim /etc/exports //添加以下内容
/wwwroot 192.168.200.112 (ro)
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
(2)[root@localhost ~]# cd /wwwroot/ //在里面添加一张图片
rz
(3)在第一台虚拟机上:
[root@localhost ~]# cd /usr/local/nginx/html/images/ //查看一下里面有在第二台虚拟机上添加的图片
[root@localhost html]# vim index.html //添加以下内容(把图片加进去)
<img src="images/wyb.jpg" />
(4)在网页上访问:192.168.200.112
*:重复前面的字符0次或多次
?:重复前面的字符0次或1次
+:重复前面的字符1次或多次
.:匹配除换行符以外的任意一个字符
(a|b):匹配a或b
^:以...开头
$:以...结尾
{n}:重复前面的字符n次
{n,}:重复前面的字符n次或更多次
{n,m}:重复前面的字符n-m次
*?:重复前面的字符0次或多次,但尽可能少重复
+?:重复前面的字符1次或多次,但尽可能少重复
??:重复前面的字符0次或1次,但尽可能少重复
{n,m}?:重复前面的字符n-m次,但尽可能少重复
{n}?:重复前面的字符n次以上,但尽可能少重复
3、正则表达式补充
W:匹配任意不是字母,数字,下划线,汉字的字符(特殊符号)
S:匹配任意不是空白符的字符
D:匹配任意非数字的字符
B:匹配任意不是单词开头或结尾的位置
[a]:匹配单个字符a
[a-z]:匹配a-z小写字符的任意一个
[^a]:匹配除了a以外的任意字符
[^abc]:匹配除了abc这几个字母以外的任意字符
4、Nginx location应用规则
先写一个location,后面匹配挑任意一个,加url的地址(网页路径)花括号里写最终要处理的动作
location [=|~|~*|^~|!~|!~*] /url/{...}
默认值:no
使用字段:server
location参数根据URL的不同需求来进行匹配,可以使用字符串与正则表达式匹配
例:location ~* .*.jsp$ {
proxy_pass http://tomcat_server;
}
(1)
http://www.a.com/
location = / {
#精准匹配 / ,主机名后面不能带任何的字符串
[configuration A ]
}
(2)
location / {
#因为所有的地址都以 / 开头,所以这条规则将匹配到所有的请求
#但是正则和最长字符串会优先匹配
[configuration B ]
}
(3)
location / documents/ {
#匹配任意以documents开头的地址,匹配符合以后,还要继续往下搜索
#只有后面的正则表达式没有匹配到时,才会采用这一条
[configuration C ]
}
(4)
location ~ / documents/Abc {
#匹配任意以documents开头的地址,匹配符合以后,还要继续往下搜索
#只有后面的正则表达式没有匹配到时,才会采用这一条
[configuration CC ]
}
(5)
location ^~ /images/ {
#匹配任意以images开头的地址,匹配符合以后,还要继续往下搜索
[configuration D ]
}
(6)
location ~*.(gif|jpg|jpeg) {
#匹配所有以gif,jpg或jpeg结尾的请求
#然而,所有的请求/images/ 下的图片会被config D 处理,因为 ^ ~ 到达不了这一条正则
[configuration E ]
}
(7)
location /images/ {
#字符匹配到 /images/,继续往下,会发现 ^~ 存在
[configuration F ]
}
(8)
location /images/abc {
#最长字符串匹配到 /images/abc,继续往下,会发现 ^~ 存在
[configuration G ]
}
6、实验(需要两台虚拟机)
第一台虚拟机确保安装nginx
第二台虚拟机上安装确保搭建好LAMP
(1)在第二台虚拟机上:[root@localhost ~]# rpm -q nfs-utils rpcbind //查看有没有安装nfs-utils rpcbind这两个软件包
[root@localhost ~]# mkdir /wwwroot //创建一个文件
[root@localhost ~]# vim /etc/exports //添加以下内容
/wwwroot 192.168.200.112 (ro)
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
(2)[root@localhost ~]# cd /wwwroot/ //在里面添加一张图片
rz
(3)在第一台虚拟机上:
[root@localhost ~]# cd /usr/local/nginx/html/images/ //查看一下里面有在第二台虚拟机上添加的图片
[root@localhost html]# vim index.html //添加以下内容(把图片加进去)
<img src="images/wyb.jpg" />
(4)在网页上访问:192.168.200.112
以上是关于Nginx location规则匹配的主要内容,如果未能解决你的问题,请参考以下文章