Nginx 重写功能

本文详细介绍了Nginx的rewrite功能,包括Rewrite跳转的场景、实现、正则表达式的作用和优势,以及Rewrite语法中的flag标记。同时,文章讲解了location的匹配规则和优先级,提供了多个实际应用场景的示例,如基于域名、IP、旧域名跳转等。
摘要由CSDN通过智能技术生成

目录

一、nginx rewrite概述

2、Rewrite跳转场景

3、Rewrite跳转实现

4、Rewrite实际场景

二、Nginx常见模块

三、常见的Nginx正则表达式

1、正则的优势

2、正则的作用

四、Rewrite语法

1、flag标记说明

2、last和break比较

五、location

1、location大致可以分为三类

2、location常用的匹配规则

3、location优先级排列说明

4、location 匹配顺序

5、三个匹配规则定义

实际网站使用中,至少有三个匹配规则定义

六、rewrite 示例

1、基于域名的跳转

2、 基于客户端 IP 访问跳转

3、基于旧域名跳转新域名后面加目录

4、基于参数匹配跳转

5、基于目录下所有php结尾的文件跳转

6、基于URL请求跳转


一、nginx rewrite概述

URL:就是一个具体路径/位置
URI:指的是一个拥有相同类型/特性的对象集合

​location是为了匹配访问的路径(URL)​
 
​if 做为分支判断,并且if分支,仅支持单分支​
 
​rewrite:对访问路径进行改写大分支:​
 
​1、改写的路径​
 
​在Nginx服务器上-改写路径​
 
2、​改写的路径​
 
​在后端/其他服务器上-跳转​

2、Rewrite跳转场景

URL看起来更规范、合理
​企业会将动态URL地址伪装成静态地址提供服务
网址换新域名后,让旧的访问跳转到新的域名上
服务端某些业务调整

3、Rewrite跳转实现

Nginx是通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。
另外该模块需要 PCRE支持,应在编译Nginx时指定PCRE 支持,默认已经安装。
根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后Nginx将返回500错误。
重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。
rewrite功能就是使用Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。​

4、Rewrite实际场景

使用rewrite进行匹配跳转(防盗链)
使用if匹配全局变量后跳转
使用location匹配再跳转(匹配的访问 路径URL location可以匹配本地的重写以及跨服务器的跳转)

rewrite放在server{}, if{},location{}段中

(多个server模块 sever模块里包含location location包含if if里面包含rewrite)
location只对域名后边的除去传递参数外的字符串起作用

对域名或参数字符串

使用if全局变量匹配
使用proxy_pass反向代理

二、Nginx常见模块

http
http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这模块中。
作用包括:文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。
server
server块,虚拟主机(虚拟服务器)。作用:使得Nginx服务器可以在同一台服务器上只要运行一组Nginx进程,就可以运行多个网站。
location
location块是server块的一个指令。作用:基于Nginx服务器接收到的请求字符串,虚拟主机名称(ip,域名)、url匹配,对特定请求进行处理。

三、常见的Nginx正则表达式

^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d :匹配纯数字
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符

1、正则的优势

精确匹配,减少遍历的消耗
节省服务响应的资源消耗
提高用户体验感
提高服务器并发时、处理效率/性能

2、正则的作用

Nginx作为运维角度前段接受、想用客户请求的直接对服务器所以需要考虑到Nginx的执行效率(精确匹配-类比)、 性能(资源消耗)、抗压能力(高并发时处理能力)、用户体验感(用户访问群体)

四、Rewrite语法

rewrite < regex > < replacement > [flag]
regex:正则表达式
replacement :跳转后的内容
flag:rewrite支持的flag标记

1、flag标记说明

标记 说明
last 相当于Apache的【L】标记,表示完成rewrite
break v本条规则匹配完成即终止,不在匹配后面的任何规则
redirect 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新url
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url

2、last和break比较

last break
使用场景 一般写在server和 if中
URL匹配 不重质重写后的url匹配
3、rewrite执行顺序
执行server块里面的rewrite指令

执行location匹配

执行选定的location中的rewrite指令

五、location

1、location大致可以分为三类

精准匹配:location = / {...}
一般匹配:location / {...} 
正则匹配:location ~ / {...}

2、location常用的匹配规则

= :进行普通字符精确匹配,也就是完全匹配。
^~ :表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。
~ :区分大小写的匹配。
~* :不区分大小写的匹配。
!~ :区分大小写的匹配取非。
!~* :不区分大小写的匹配取非。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值