nginx 正则路径匹配

2024-09-05 22:32
文章标签 路径 nginx 匹配 正则

本文主要是介绍nginx 正则路径匹配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

更多请参考:https://liuhuiyao.blog.csdn.net/article/details/119459183


Nginx路径匹配符号

= 表示精确匹配
^~ 表示uri以某个常规字符串开头,大多情况下用来匹配url路径,nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 正则匹配(区分大小写)
~* 正则匹配(不区分大小写)
!~ 区分大小写不匹配
!~* 不区分大小写不匹配
/ 任何请求都会匹配

注意要使用正则除了正则表达式,location 后还要加 ~ 相关表达式、 才能表示后面是正则表达式!!! 如下:

注意 :~ 表达式 和 正则表达式 中间有空格。

location [=|~|~*|^~] /uri/ { }


符号优先级


首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

示例

获取 location 中匹配的正则表达式匹配的字符串

  • 访问http://localhost/test/a.html,在本机寻找文件路径为/usr/local/html/a.html;
  • $1表示正则表达式中的第一个括号内匹配的内容;
location ~ /test/(.*\.html)$ {alias /usr/local/html/$1;}

基础使用

location  = / {# 精确匹配 / ,主机名后面不能带任何字符串[ 规则 A ] 
}location  / {# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求# 但是正则和最长字符串会优先匹配[ 规则 B ] 
}location /documents/ {# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条[ 规则 C ] 
}location ~ /documents/Abc {# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条[ 规则 D ] 
}location ^~ /images/ {# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。[ 规则 E ] 
}location ~* \.(gif|jpg|jpeg)$ {# 匹配所有以 gif,jpg或jpeg 结尾的请求# 然而,所有请求 /images/ 下的图片会被 [规则 E] 处理,因为 ^~ 优先级更高[ 规则 F ] 
}location /images/ {# 字符匹配到 /images/,继续往下,会发现 ^~ 存在[ 规则 G ] 
}location /images/abc {# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在[ 规则 H ] 
}location ~ /images/abc/ {# 只有去掉 [规则 E] 才有效:先最长匹配 [规则 H] 开头的地址,继续往下搜索,匹配到这一条正则,采用[ 规则 I ] 
}

匹配MP_verify_****.txt文件,中间任意字符,并在/usr/share/nginx/file目录中寻找对应文件

# 微信授权文件通用匹配规则
location ~ (MP_verify_)*\.(txt)$ {root   /usr/share/nginx/file;
}

匹配/static开头路径,并在/data/product/static寻找对应文件  

# 静态文件工程配置
location ^~ /static/ {root   /data/product/static;index  index.html index.htm;
}

 匹配以.html 等结尾的

# 静态文件配置
location ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {  root /data/product/static/;  
}


配置proxy_pass时路径拼接规则


在nginx中配置proxy_pass时,如果是按照^~匹配路径时,要注意proxy_pass后的url最后的/

  • 当加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;
  • 如果没有/,则会把匹配的路径部分也给代理走
server {listen 80;server_name test.xxx.com;location ^~ /abc {proxy_set_header    Host $host;proxy_set_header    X-Real-IP  $remote_addr;proxy_pass http://127.0.0.1:8081/;}
}

加上/ 请求地址http://test.xxx.com/abc/index,会转发到http://127.0.0.1:8081/index

server {listen 80;server_name test.xxx.com;location ^~ /abc {proxy_set_header    Host $host;proxy_set_header    X-Real-IP  $remote_addr;proxy_pass http://127.0.0.1:8081;}
}

不加/ 请求地址http://test.xxx.com/abc/index,会转发到http://127.0.0.1:8081/abc/index

这篇关于nginx 正则路径匹配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140247

相关文章

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

POJ 3057 最大二分匹配+bfs + 二分

SampleInput35 5XXDXXX...XD...XX...DXXXXX5 12XXXXXXXXXXXXX..........DX.XXXXXXXXXXX..........XXXXXXXXXXXXX5 5XDXXXX.X.DXX.XXD.X.XXXXDXSampleOutput321impossible

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

nginx介绍及常用功能

什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务。 Apache:重量级的,不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。这些都决定了Apache不可能成为高性能WEB服务器  nginx: