一、nginx rewrite概述
location是为了匹配访问的路径(URL)
if 做为分支判断,并且if分支,仅支持单分支
rewrite:对访问路径进行改写大分支;
1、改写的路径
在Nginx服务器上-改写路径
2、改写的路径
在后端/其他服务器上-跳转
- URI(Uniform Resource Identifier ),统一资源标识符;
- URL(Uniform Resource Locator ),统一资源定位符,不仅标识了资源,还指定了操作或者获取方式,同时指出了主要访问机制和网络位置;
- URN(Uniform Resource Name ),统一资源名称,用特定命名空间的名字标识资源,使用URN可以在不知道其网络位置及访问方式的情况下讨论资源。
跳转场景
1、可以调整用户浏览的URL,看起来更规范,合理
2、为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
3、网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com。
4、服务端某些业务调整
5、根据特殊变量、目录、客户端的信息进行URL调整等
跳转实现
1、Nginx是通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。
2、另外该模块需要 PCRE支持,应在编译Nginx时指定PCRE 支持,默认已经安装。
3、根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后Nginx将返回500错误。
4、重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。
5、rewrite功能就是使用Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
rewrite实际场景
①nginx跳转需要的实现方式 使用rewrite进行匹配跳转(防盗链)
使用if匹配全局变量后跳转
使用location匹配再跳转(匹配的访问 路径URL location可以匹配本地的重写以及跨服务器的跳转)
②rewrite放在server{}, if{},location{}段中 (多个server模块 sever模块里包含location location包含if if里面包含rewrite) location只对域名后边的除去传递参数外的字符串起作用
③对域名或参数字符串 使用if全局变量匹配 使用proxy_pass反向代理 *****
常见的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] :匹配所有大小写字母或数字
- () :表达式的开始和结束位置
- | :或运算符
Nginx使用正则的作用
Nginx作为运维角度前段接受、想用客户请求的直接对服务器所以需要考虑到Nginx的执行效率(精确匹配-类比)、性能(资源消耗)、抗压能力(高并发时处理能力)、用户体验感(用户访问群体)
rewrite
rewrite语法
rewrite < regex > < replacement > [flag]
regex:正则表达式
replacement :跳转后的内容
flag:rewrite支持的flag标记
flag标记说明
| 标记 | 说明 |
|---|---|
| last | 相当于Apache的【L】标记,表示完成rewrite |
| break | 本条规则匹配完成即终止,不在匹配后面的任何规则 |
| redirect | 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新url |
| permanent | 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url |
rewrite跳转
基于域名跳转
基于客户端IP的跳转
基于旧域名跳转新域名后面加目录
基于参数匹配跳转
基于目录下所有php结尾的文件跳转
基于最普通的一条url请求的跳转