您的位置:首页技术文章
文章详情页

nginx location指令(匹配顺序匹配冲突)实战示例详解

【字号: 日期:2023-08-03 20:13:38浏览:6作者:猪猪
目录1. 对url的匹配1.1 默认匹配1.2 精确匹配( = )1.3 正则,区分大小写 ( ~ )1.4 正则表达式,不区分大小写 ( ~* )2. 匹配顺序2.1 示例(精确匹配最高)2.2 示例(字串匹配次之)2.3 示例(正则匹间配高于通用匹配)2.4 示例(正则表达式间前边的为准)2.5 示例(通用匹配兜底)3. 匹配间的冲突3.1 通用匹配 VS 字串匹配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指令的资料请关注好吧啦网其它相关文章!

标签: Nginx