Nginx重写功能(rewrite与location)(一)

简介: Nginx重写功能(rewrite与location)(一)

一 、常用的nginx 正则表达式


字符

涵义以及示例
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配前面的字符零次或多次;如“ol*”能匹配“o”及“ol”、“oll”
+ 匹配前面的字符一次或多次;如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? 匹配前面的字符零次或一次;例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. 匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\

将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“” 则 匹 配 “ ”则匹配“”则匹配“”

\d

匹配纯数字
\D 匹配非数字字符,等价于[^0-9]
\s 匹配空白字符(空格或者制表符)
\S

匹配非空字符

\w

匹配包括下划线的任何字符,等价于[a-zA-Z0-9_]

\W

匹配任何非单词字符。 等价于 [^a-zA-Z0-9_]

{n}

重复 n 次

{n,}

重复 n 次或更多次

{n,m}

重复 n 到 m 次

[ ]

定义匹配的字符范围

[c]

匹配单个字符 c

[a-z]

匹配 a-z 小写字母的任意一个

[a-zA-Z0-9]

匹配所有大小写字母或数字

()

表达式的开始和结束位置

|

或运算符


二 、nginx 配置文件里 location 项

2.1 localtion 作用

location 用于匹配用户访问的URL,来适用哪一个目录中的资源


2.2 location 可以分为三类

精准匹配 : location = / {…}

一般匹配 : location / {…}

正则匹配 : location ~ / {…}


2.3 location 的常用匹配规则

字符 涵义
= 进行普通字符精确匹配,也就是完全匹配
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location
~ 区分大小写的匹配
~* 不区分大小写的匹配
!~ 区分大小写的匹配取非
!~* 不区分大小写的匹配取非

2.4 location 的 优先级与匹配规则

1.首先是 精确匹配 =


eg: location = /test/ { }


2.其次是 前缀匹配 ^~\


eg: location ^~ /test/ { }


3.其次是按文件中顺序的正则匹配 ~ 或 ~*


eg: location ~ /test/ { }


4.然后是一般匹配 ,后面不带 / 的匹配


eg: locaton /test/ { }


5.最后是 交给 / 通用匹配


eg: location / { }


首先看匹配的优先级 精确匹配 > 前缀匹配 > 正则匹配 > 一般匹配 > 通用匹配


当 没有精确匹配,只有前缀匹配,或者 正则匹配 时,同等级的优先级遵循匹配即停止原则。即当都是正则匹配时,哪个localtion 写在配置文件的上面,就匹配哪个


一般匹配,则遵循最长匹配原则,当只有一般匹配符合时,哪个location 匹配的url 最长,则使用哪个。但是,如果有符合规则的精确匹配,前缀匹配,正则匹配,则使用优先级高的。


2.5 location 示例说明

1)location = / {}

=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配

再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。


(2)location / {}

因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,

但若后面是正则表达式会和最长字符串优先匹配(最长匹配原则)


(3)location /test/ {}

匹配任何以 /test/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location

只有其它 location后面的正则表达式没有匹配到时,才会采用这一条


(4)location /test/abc {}

匹配任何以 /test/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location

只有其它 location后面的正则表达式没有匹配到时,才会采用这一条


(5)location ^~ /images/ {}

匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条(匹配即停止原则)


(6)location ~* .(gif|jpg|jpeg)$ {}

匹配所有以 gif、jpg或jpeg 结尾的请求

然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则


(7)location /images/abc {}

最长字符匹配到 /images/abc ,如果只有一般匹配,则会使用它,但时由于有 正则匹配和前缀匹配,而一般匹配优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在


(8)location ~ /images/abc {}

匹配以/images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条


(9)location /images/abc/1.html {}

匹配/images/abc/1.html 文件,如果和正则 ~ /images/abc/1.html 相比,正则优先级更高


2.6 网站使用中的三个匹配规则

2.6.1 第一个必选规则

直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。

这里是直接转发给后端应用服务器了,也可以是一个静态首页

复制location = / {
    proxy_pass http://tomcat_server/;
}


2.6.2 第二个必选规则是处理静态文件请求

这是nginx作为http服务器的强项!

有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用


复制location ^~ /static/ {
  root /webroot/static/;
}
location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {
  root /webroot/res/;
  }


2.6.3第三个规则就是通用规则

比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器

非静态文件请求就默认是动态请求


复制location / {
    proxy_pass http://tomcat_server;
}
目录
相关文章
|
4月前
|
负载均衡 网络协议 应用服务中间件
【Nginx】Nginx 功能特性
【1月更文挑战第25天】【Nginx】Nginx 功能特性
|
5月前
|
自然语言处理 前端开发 应用服务中间件
nginx的Location语法规则
nginx的Location语法规则
|
6月前
|
应用服务中间件 nginx Perl
Nginx系列教程(09) - rewrite
Nginx系列教程(09) - rewrite
62 0
|
6月前
|
应用服务中间件 nginx
Nginx系列教程(07) - Location正则表达式
Nginx系列教程(07) - Location正则表达式
74 0
|
9月前
|
应用服务中间件 nginx
Nginx rewrite(URL)地址重定向
Nginx rewrite(URL)地址重定向
340 0
|
6月前
|
应用服务中间件 nginx
nginx防盗链功能
nginx防盗链功能
|
9月前
|
缓存 负载均衡 网络协议
一文讲懂Nginx常用配置及和基本功能
一文讲懂Nginx常用配置及和基本功能
253 1
|
7月前
|
应用服务中间件 nginx
【Nginx】记录 nginx 配置文件中 location下根据 ua (user-agent) 判断移动端和电脑端不同浏览器来源
【Nginx】记录 nginx 配置文件中 location下根据 ua (user-agent) 判断移动端和电脑端不同浏览器来源
101 0
|
7月前
|
运维 Java 应用服务中间件
【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
90 0
|
7月前
|
缓存 应用服务中间件 网络安全
百度搜索:蓝易云【Nginx常用配置及和基本功能详解!】
这些是Nginx的一些常用配置和基本功能。Nginx还具有更多的高级功能和模块,可以根据具体需求进行灵活配置和扩展。
63 0