mirror 流量复制

Nginx的 mirror 指令来自于 ngx_http_mirror_module 模块 Nginx Version > 1.13.4

mirror 指令提供的核心功能就是流量复制, 至于流量复制要用来干嘛,这个就各取所需了。

  • 先看一段示例配置:
location / {
# 开启流量复制
mirror /mirror;
proxy_pass http://backend;
} # 复制的流量转发到这里
location = /mirror {
# internal 标志该location只为内部的重定向服务, 外面来的返回404
internal;
# $request_uri 需要显示指明,因为流量复制过来之后会丢掉request_uri
proxy_pass http://test_backend$request_uri;
}

有什么实际用处?

  • 举个实际使用的例子:

上篇写了Nginx的map指令用法其中提到的一个使用cookie进行多环境分流的例子,同样的场景, 基于cookie分流遇到的一个问题是:对于第三方的回调请求支持不友好, 因为第三方不可能携带我们自定义的cookie来回调我们。这样说可能没参与项目的不太好理解, 简单说是这样的: 比如我在3环境和腾讯云做了交互, 之后腾讯云会回调3环境的一个接口(因为测试多环境使用同一个域名),完犊子了吧,因为腾讯云没有带我们分环境的cookie, 因此我在3环境的这个交互一定是无法完成的。

那么如何解决这个问题? mirror 指令可以解决。

- Nginx 会丢弃 mirror 的响应 : 这一点很重要

为了解决第三方回调的问题,我们开启了Nginx的mirror, 把回调接口的请求复制到测试所有环境内,总有一个是目标环境(从业务上说即使回调到其他环境也无所谓,所以直接镜像到所有环境), 配置大致是这样:

location /notify/v1.0/ {
mirror /test-01;
mirror /test-02;
mirror /test-03;
mirror /test-04;
mirror /test-05;
mirror /test-06;
mirror /test-07;
mirror /test-08;
mirror /test-09;
mirror /test-10;
} location = /test-01 {
internal;
# 头信息视情况添加/删除
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://upstream_test-01$request_uri;
} upstream upstream_test-01 {
server 1.1.1.1:80 weight=100 max_fails=10 fail_timeout=60s;
}
  • 再举个实际的例子

灰度验证

提供给一个思路: 比如你需要改动线上的都个配置,但是不确定是不是有问题的时候, 这个时候其实可以使用一下mirror的流量复制, 先在灰度环境改掉,然后使用mirror镜像线上流量到灰度验证,这时候你只需要观测灰度的请求是否正常即可。(当然可以自动化程度高一些,自由发挥), 也可以使用 split_client 指令做部分流量的验证。

注意点

  1. Nginx会丢弃mirror响应,但是如果mirror过去的请求一直无响应或响应慢的时候,这时会影响主请求的响应速度的。
  2. 需要注意,一般不会把POST/PUT等会影响数据状态的请求做镜像的, 除非你明确清楚的知道这样产生的影响并且可以接受.

Nginx的mirror指令能干啥?的更多相关文章

  1. nginx:location指令中的正则表达式

    nginx:location指令中的正则表达式 uri匹配步骤 官网说明https://docs.nginx.com/nginx/admin-guide/web-server/web-server/ ...

  2. (转)nginx日志配置指令详解

    这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...

  3. nginx 配置优化指令

    worker_processes worker_processes指令是用来设计Nginx进程数,官方默认设为1,赋值太多了,将会对系统IO影响效率,降低Nginx服务器性能.但是为了让多核CPU能够 ...

  4. nginx日志配置指令详解

    这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...

  5. [Linux] nginx的try_files指令实现隐藏index.php的重写

    1.nginx的try_files指令 ,核心功能是替代rewrite,并且比rewrite更强大的是可以按顺序查找文件是否存在,如果文件都找不到才会执行最后的重定向解决的问题是,如果一个网站的部署是 ...

  6. Nginx源码研究七:nginx的location指令分析

    在nginx的配置文件nginx.conf中,我们在配置server的时候,会配置一下location指令,这个location指令是提供给用户来配置对于符合指令的http请求,采用该指令内部的处理方 ...

  7. nginx的sendfile指令的作用

    linux为了解决对读文件产生的从应用空间到内核空间复制数据产生的效率影响引进了零拷贝.什么是零拷贝?这里就不多说了,请参考http://blog.csdn.net/crazyguang/articl ...

  8. Nginx的try_files指令和命名location使用实例

    Nginx的配置语法灵活,可控制度非常高.在0.7以后的版本中加入了一个try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率. 下面是一个使用实 ...

  9. Nginx HTTP模块指令

    alias 指令 该指令用于在url和系统路径之间的映射. location /a/{ alias /b/; } error_page 定义错误页面 error_page 404 /404.html; ...

随机推荐

  1. memcached 是怎么工作的?

    Memcached 的神奇来自两阶段哈希(two-stage hash).Memcached 就像一 个巨大的.存储了很多<key,value>对的哈希表.通过 key,可以存储或查询任意 ...

  2. 学习Nginx(二)

    Nginx支持四层代理 http://nginx.org/en/docs/stream/ngx_stream_core_module.html 该ngx_stream_core_module模块自1. ...

  3. 重定向(redirect)与转发(forward)的区别

    重定向(redirect)与转发(forward)的区别 1.重定向时地址栏会发生改变,转发时地址栏不会发生改变 当浏览器请求资源时,服务器直接访问目标地址的URL,将URL的响应内容读取,之后再将读 ...

  4. ubuntu+ROS安装turtulebot3

    0 简介 Turtlebot是一种室内移动机器人,搭载激光传感器,使机器有精确的距离感知能力.通过搭建仿真环境,可以在没有硬件支持的情况下进行仿真和编程,并熟悉ros系统.环境使Ubuntu16.04 ...

  5. can总线第三讲

    一  CAN控制器官方定义:CAN控制器用于将欲收发的信息(报文),转换为符合CAN规范的CAN帧,通过CAN收发器,在CAN-bus上交换信息.举个便于理解的例子:就像您发快递一样,要根据快递公司提 ...

  6. 深入理解ES6之《块级作用域绑定》

    众所周知,js中的var声明存在变量提升机制,因此ESMAScript 6引用了块级作用域来强化对变量生命周期的控制let const 声明不会被提升,有几个需要注意的点1.不能被重复声明 假设作用域 ...

  7. 订单突破10000+,仅花1小时,APPx独家深入剖析背后的秘密!

    拼多多:成立三年,获客三亿,月订单成交额达到恐怖的400亿,成功上市! 糕妈优选:营销活动推送1小时,订单超过10000+,商品成功刷屏朋友圈! 寻慢:一场活动净增7000+粉丝,付款转化率高达71% ...

  8. 关于 video 播放的新探索

    前端同学要使用 HTML5 播放器视频,必然会使用 video 标签,不过大多数同学只是使用了较简单的功能,其实它本身拥有不凡之力有待我们发现. 首先,我们先来看下 video 最基础的用法: 使用 ...

  9. Hadoop搭建高可用的HA集群

    一.工具准备 1.7台虚拟机(至少需要3台),本次搭建以7台为例,配好ip,关闭防火墙,修改主机名和IP的映射关系(/etc/hosts),关闭防火墙 2.安装JDK,配置环境变量 二.集群规划: 集 ...

  10. nodeJs入门的第一节课

    nodejs是什么? nodejs的架构模式以及优缺点 nodejs异步IO nodejs事件驱动 nodejs单线程 nodejs应用场景 一.nodejs是什么? 1.1nodejs是一个开源的. ...