Nginx Rewrite
Nginx Rewrite概述
Rewrite跳转场景
- URL看起来更规范、合理
- 企业会将动态url地址伪装成静态地址提供服务
- 网址换新域名后,让旧的访问跳转到新的域名上
- 服务端某些业务调整
Rewrite跳转实现
- nginx-----支持url重写、支持if条件判断,但不支持else
- 跳转------循环最多可以执行10次,超过后nginx将返回500代码错误
- rewrite------使用nginx’全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定
Rewrite实际场景
nginx跳转需求的实现方式
- 使用rewrite进行匹配跳转
- 使用if匹配全局变量后跳转
- 使用location匹配再跳转
rewrite放在 server{},if{},location{}段中
对域名或参数字符串 - 使用if全局变量匹配
- 使用proxy_pass反向代理
Nginx正则表达式
常用的正则表达式元字符
Rewrite命令
语法
last 和 break 比较
location分类
分类、正则匹配的常用表达式
location优先级
相同类型的表达式,字符串长的会优先匹配
按优先级排列
- = 类型
- ^~ 类型表达式
- 正则表达式(和*)类型
- 常规字符串匹配类型,按前缀匹配
- 通用匹配(/),如果没有其他匹配,任何请求都会匹配到
location优先级的示例
location优先级规则
匹配某个具体文件
- (location = 完整路径)> (location ^~ 完整路径)> (location ~* 完整路径) > (location ~ 完整路径) > (location 完整路径) > (location /)
用目录做匹配访问某个文件 - (location = 目录)> (location ^~ 目录/)> (location ~ 目录) > (location ~* 目录) > (location 目录) > (location /)
比较rewrite 和location
相同点:都能实现跳转
不同点:
- rewrite是在同一域名内更改获取资源的路径
- location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器
rewrite会写在location里,执行顺序 - 执行server块里面的rewrite指令
- 执行location匹配
- 执行选定的location中的rewrite指令
应用场景测试
基于域名的跳转
公司旧域名www.51xit.top,因业务需求有变更,需要使用新域名www.52xit.top代替
- 不能废除旧域名
- 从旧域名跳转到新域名,且保持其参数不变在windows里的hosts文件中做映射关系
#先另起一台服务器20.0.0.12,做一个测试网页