当前位置:首页 > Nginx > 正文内容

Nginx正则匹配规则

5年前 (2019-11-02)Nginx1091

正则表达式匹配 :

~         为区分大小写匹配
~*       为不区分大小写匹配

!~        不匹配的
!~*      不匹配的

^~     标识符后面跟一个字符串。Nginx将在这个字符串匹配后停止进行正则表达式的匹配(location指令中正则表达式的匹配的结果优先使用),如:location ^~ /images/,你希望对/images/这个目录进行一些特别的操作,如增加expires头,防盗链等,但是你又想把除了这个目录的图片外的所有图片只进行增加expires头的操作,这个操作可能会用到另外一个location,例如:location ~* \.(gif|jpg|jpeg)$,这样,如果有请求/images/1.jpg,nginx如何决定去进行哪个location中的操作呢?结果取决于标识符^~,如果你这样写:location /images/,这样nginx会将1.jpg匹配到location ~* \.(gif|jpg|jpeg)$这个location中,这并不是你需要的结果,而增加了^~这个标识符后,它在匹配了/images/这个字符串后就停止搜索其它带正则的location。
=      表示精确的查找地址,如location = /它只会匹配uri为/的请求,如果请求为/index.html,将查找另外的location,而不会匹配这个,当然可以写两个location,location = /和location /,这样/index.html将匹配到后者,如果你的站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。

     表示为一个location进行命名,即自定义一个location,这个location不能被外界所访问,只能用于Nginx产生的子请求,主要为error_page和try_files。

    匹配除换行符以外的任意字符
\w         匹配字母或数字或下划线或汉字
\s         匹配任意的空白符
\d         匹配数字
\b         匹配单词的开始或结束
^         匹配字符串的开始
        匹配字符串的结束

        重复零次或更多次
        重复一次或更多次
?         重复零次或一次
{n}     重复n次
{n,}     重复n次或更多次
{n,m}     重复n到m次
*?             重复任意次,但尽可能少重复
+?             重复1次或更多次,但尽可能少重复
??             重复0次或1次,但尽可能少重复
{n,m}?     重复n到m次,但尽可能少重复
{n,}?     重复n次以上,但尽可能少重复

\W         匹配任意不是字母,数字,下划线,汉字的字符
\S         匹配任意不是空白符的字符
\D         匹配任意非数字的字符
\B         匹配不是单词开头或结束的位置
[^x]         匹配除了x以外的任意字符
[^aeiou]     匹配除了aeiou这几个字母以外的任意字符

(exp)     捕获     匹配exp,并捕获文本到自动命名的组里
(?<name>exp)     匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)     匹配exp,不捕获匹配的文本,也不给此分组分配组号
(?=exp)    零宽断言      匹配exp前面的位置
(?<=exp)     匹配exp后面的位置
(?!exp)     匹配后面跟的不是exp的位置
(?<!exp)     匹配前面不是exp的位置
注释     (?#comment)     这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读


文件及目录匹配,其中:

-f 和 !-f 用来判断是否存在文件
-d !-d 用来判断是否存在目录
-e !-e 用来判断是否存在文件或目录
-x !-x 用来判断文件是否可执行


flag标记有:

last 相当于Apache里的[L]标记,表示完成rewrite
break 终止匹配, 不再匹配后面的规则

redirect 返回302临时重定向 地址栏会显示跳转后的地址
permanent 返回301永久重定向 地址栏会显示跳转后的地址

$args 此变量与请求行中的参数相等
$content_length 等于请求行的“Content_Length”的值。
$content_type 等同与请求头部的”Content_Type”的值
$document_root 等同于当前请求的root指令指定的值
$document_uri 与$uri一样
$host 与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样
$limit_rate 允许限制的连接速率
$request_method 等同于request的method,通常是“GET”或“POST”
$remote_addr 客户端IP
$remote_port 客户端port端口
$remote_user 等同于用户名,由ngx_http_auth_basic_module认证
$request_filename 当前请求的文件的路径名,由root或alias和URI request组合而成
$request_body_file
$request_uri 含有参数的完整的初始URI
$query_string 与$args一样
$server_protocol 等同于request的协议,使用“HTTP/1.0”或“HTTP/1.1”
$server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。
$server_name 请求到达的服务器名
$server_port 请求到达的服务器的端口号
$uri 等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index

“Nginx正则匹配规则” 的相关文章

Nginx的编译安装

Nginx快速安装Mainline version 开发版Stable version 稳定版Legacy version 历史版本基础环境准备:#确认系统网络 [root@qmf ~]# ping baidu.com #确认yum可用 [root@qmf&n...

Nginx代理与反向代理

Nginx代理与反向代理

1、Nginx代理服务1.1、什么是代理1.2、在服务中没有代理的场景都是客户端直接请求服务端,服务端直接响应客户端。1.3、互联网请求里面,客户端往往通过代理服务向服务端发起请求,来实现客户端和服务通信2、Nginx代理服务常见模式2.1、正向代理2.2、反向代理2.3、正向代理与反向代理的区别1...

Nginx作为缓存WEB服务

Nginx作为缓存WEB服务

通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后端压力,提高网站并发延时1.缓存常见类型服务端缓存代理缓存, 获取服务端内容进行缓存客户端浏览器缓存Nginx代理缓存原理2.缓存配置语法proxy_cache配置语法Syntax: proxy_cache zon...

Nginx实现动静分离

Nginx实现动静分离

Nginx动静分离基本概述动静分离,通过中间件将动静分离和静态请求进行分离;通过中间件将动态请求和静态请求分离,可以建上不必要的请求消耗,同事能减少请求的延时。通过中间件将动态请求和静态请求分离,逻辑图如下:动静分离好处:动静分离后,即使动态服务不可用,但静态资源不会受到影响。Nginx动静分离场景...

Nginx实现Rewrite重写(url重写跳转)及各种案例

Nginx实现Rewrite重写(url重写跳转)及各种案例

Rewrite基本概述Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。Rewrite使用场景1、地址跳转,用户访问www.drz.com这个URL是,将其定向至一个新的域名mobile.drz.com2、协议跳转,用户通过http协议请求网站时,将其...