nginx location指令(匹配顺序匹配冲突)实战示例详解
更新时间:2023年06月21日 11:37:54 作者:开发运维玄德公
这篇文章主要介绍了nginx location指令(实战示例匹配顺序匹配冲突)详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
1. 对url的匹配
1.1 默认匹配
- 语法示例
location /crow/ {
return 501 "通用匹配\n";
}
1.2 精确匹配( = )
- 语法示例
location = /crow/ {
return 501 "精确匹配\n";
}
1.3 正则,区分大小写 ( ~ )
- 语法示例
location ~ /crow/.*\.md {
return 501 "正则表达式,区分大小写\n";
}
1.4 正则表达式,不区分大小写 ( ~* )
- 语法示例
location ~* /crow/.*\.md {
return 501 "正则表达式,不区分大小写\n";
}
2. 匹配顺序
- 精确匹配(
=) - 字串匹配(
^~) - 正则匹配(
~、~*) - 默认匹配()
2.1 示例(精确匹配最高)
- 配置文件内容:
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
location = /crow/test.md {
return 501 "精确匹配\n";
}
location ~ /crow/.*\.md {
return 501 "正则表达式,区分大小写\n";
}
location ~* /crow/.*\.md {
return 501 "正则表达式,不区分大小写\n";
}
location ^~ /crow/test.md {
return 501 "字串匹配\n";
}
}
- 访问测试
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 精确匹配
可见精确匹配被匹配到。
下边我们去掉精确匹配:
2.2 示例(字串匹配次之)
- 配置文件内容:
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
#location = /crow/test.md {
# return 501 "精确匹配\n";
#}
location ~ /crow/.*\.md {
return 501 "正则表达式,区分大小写\n";
}
location ~* /crow/.*\.md {
return 501 "正则表达式,不区分大小写\n";
}
location ^~ /crow/test.md {
return 501 "字串匹配\n";
}
}
- 访问测试
如下可见,还剩 字串匹配、正则匹配、通用匹配,结果匹配到了 字串匹配。
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 字串匹配
2.3 示例(正则匹间配高于通用匹配)
- 配置文件
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
#location = /crow/test.md {
# return 501 "精确匹配\n";
#}
location ~ /crow/.*\.md {
return 501 "正则表达式,区分大小写\n";
}
location ~* /crow/.*\.md {
return 501 "正则表达式,不区分大小写\n";
}
#location ^~ /crow/test.md {
# return 501 "字串匹配\n";
#}
}
- 访问测试
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 正则表达式,区分大小写
2.4 示例(正则表达式间前边的为准)
上例中我们看到:~在前边,因此先匹配了 ~。如果我们把~和~*换个位置
- 配置文件
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
location ~* /crow/.*\.md {
return 501 "正则表达式,不区分大小写\n";
}
location ~ /crow/.*\.md {
return 501 "正则表达式,区分大小写\n";
}
}
- 访问测试
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 正则表达式,不区分大小写
2.5 示例(通用匹配兜底)
配置文件
我们还是将所有匹配都写上
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
location = /crow/test.md {
return 501 "精确匹配\n";
}
location ~ /crow/.*\.md {
return 501 "正则表达式,区分大小写\n";
}
location ~* /crow/.*\.md {
return 501 "正则表达式,不区分大小写\n";
}
location ^~ /crow/test.md {
return 501 "字串匹配\n";
}
}
- 访问测试
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.txt 通用匹配
3. 匹配间的冲突
3.1 通用匹配 VS 字串匹配
通用匹配和字串匹配相同时,启动报错
- 配置文件
location /crow/test.md {
return 501 "通用匹配\n";
}
location ^~ /crow/test.md {
return 501 "字串匹配\n";
}
- 启动报错如下:
nginx-crow-test | nginx: [emerg] duplicate location "/crow/test.md" in /etc/nginx/conf.d/default.conf:45
以上就是nginx location指令(实战示例匹配顺序匹配冲突)使用详解的详细内容,更多关于nginx location指令的资料请关注脚本之家其它相关文章!
相关文章
Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案
这篇文章主要介绍了Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案,其主要思想依然是动静分离并且以Nginx来进行反向代理这样的路子,需要的朋友可以参考下2015-12-12
nginx:413 Request Entity Too Large的处理办法--修改 PHP上传文件大小
在用 phpMyAdmin 进行 sql 数据库导入的时候,经常需要上传比较大的 sql 数据文件,而这时会常碰见 nginx报错:413 Request Entity Too Large。解决此问题,根据上传数据文件的大小进行修改处理2014-06-06
解决Nginx配置静态资源文件404 Not Found问题
在使用Nginx作为静态资源服务器时,如果配置了根目录root导致404错误,而使用前缀URL配置alias则需要正确处理目录路径,使用alias时要确保目录名后加‘/’,并且在需要时使用root和alias配置,本文介绍Nginx配置静态资源文件404 Not Found问题解决方法,感兴趣的朋友一起看看吧2025-03-03


最新评论