Nginx的跳转到底怎么配的?

跳转场景

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

实际场景

1.Nginx跳转需求的实现方式
使用rewrite进行匹配跳转
使用if匹配全局变量后跳转
使用location匹配再跳转

2.rewirte放在server{},if{},location{}段中
location只对域名后边的除去传递参数外的字符串起作用

3.对域名或参数字符串
使用if全局变量匹配 (重定向)
使用proxy_pass反向代理 (动静分离)

Nginx正则表达式

常用的正则表达式元字符

  字符                         说明
   ^                   匹配输入字符串的起始位置
   $                   匹配输入字符串的结束位置
   *                   匹配前面的字符零次或多次
   +                   匹配前面的字符一次或多次
   ?                  匹配前面的字符零次或一次
   .                   匹配除“\n”(换行)之外的任何单个字符
   \      转义字符      将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用(使用诸如“[.\n]”之类的模式,可匹配包括“\n”在内的任意字符)
  \d                   匹配纯数字  [0-9] 代替单个数字
  {n}                  重复n次
 {n,}                  重复n次或更多次
  [c]                  匹配单个字符c
 [a-z]                 匹配a-z小写字母的任意一个
[a-zA-Z]               匹配a-z小写字母或A-Z大写字母的任意一个

Rewrite命令

Rewrite命令语法
在这里插入图片描述
flag标记说明
在这里插入图片描述

last和break比较

在这里插入图片描述
(1)last:url重写后,马上发起一个新请求。再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏不变。
(2)break:url重写后,直接使用当前资源,不再使用location余下的语句,完成本次请求,地址栏不变。
总结:last和break在重定向后,地址栏都不会发生变化,这是它们的相同点,不同点在于last会写在server和if中,break是写在location中,last不会终止重写后的url匹配,break会终止重写后的url匹配。

location分类

分类

location = patt {} [精确匹配]
location patt {} [一般匹配]
location ~ patt {} [正则匹配]

正则匹配的常用表达式
在这里插入图片描述loation优先级
1.相同类型的表达式,字符串长的会优先匹配

2.按优先级排列

= 类型                                       精确匹配
^~ 类型表达式                                 前缀匹配
正则表达式 (~和~*)类型  
常规字符串匹配类型,按前缀匹配                   一般匹配
通用匹配(/),如果没有其他匹配,任何请求都会匹配到  通用匹配

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. domain.com有业务需求有变更,需要使用新域名www.newdomain.com代替。
要求:
旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变.

配置环境:Nginx架构上

1、给windows配置映射

在C/Windows/system32/drivers/etc/hosts文件
文本形式打开文件
添加
20.0.0.13 www.domain.com www.newdomain.com

2、编辑配置文件
vi /etc/nginx.conf 

####修改默认站点配置文件
server {
   
	server_name www.domain.com; 
	if  ($host = 'www.domain.com')
          {
   
	rewrite ^/(.*)$ http://www.newdomain.com/$1 permanent;
          }
}

####添加新域名www
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值