概述

因为我们的接口环境是在winserver上,而gor又刚好没对应版本(网上很多办法都试过了...哪位朋友测试过可以的话指点下),所以用了nginx的ngx_http_mirror_module模块来实现需求。


01

ngx_http_mirror_module模块

nginx官网公布了nginx1.13.4最新的ngx_http_mirror_module模块,利用mirror模块,业务可以将线上实时访问流量拷贝至其他环境,基于这些流量可以做版本发布前的预先验证,进行流量放大后的压测等等。


02

mirror模块配置

mirror模块配置分为两部分,源地址和镜像地址配置,配置位置可以为nginx配置文件的http, server, location上下文,配置示例为:

mirror模块配置说明#originallocation / {       #location /指定了源uri为/  root html;  index index.html index.htm;  mirror /mirror;       #lmirror /mirror指定镜像uri为/mirror mirror /mirror;       #lmirror /mirror指定镜像uri为/mirror  mirror_request_body on;   # 指定是否镜像请求body部分,请求自动缓存;}#mirrorlocation /mirror {  internal;internal  #指定此location只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)  proxy_set_header X-Original-URI $request_uri;  proxy_set_header Host baidu-nginx-b.com; #proxy_set_header 设置镜像流量的头部  proxy_pass http://192.168.1.100$request_uri; #proxy_pass 指定将镜像数据发送给test server的地址}location /mirror2 {  internal;internal  #指定此location只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)  proxy_set_header X-Original-URI $request_uri;  proxy_set_header Host baidu-nginx-b.com; #proxy_set_header 设置镜像流量的头部  proxy_pass http://192.168.1.100$request_uri; #proxy_pass 指定将镜像数据发送给test server的地址}

1、original配置

  • location /指定了源uri为/
  • mirror /mirror指定镜像uri为/mirror
  • mirror_request_body off | on 指定是否镜像请求body部分,此选项与proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering和 uwsgi_request_buffering冲突,一旦开启mirror_request_body为on,则请求自动缓存;
  • proxy_pass 指定上游server的地址

2、mirror配置

  • internal 指定此location只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)
  • proxy_pass 指定上游server的地址
  • proxy_set_header 设置镜像流量的头部

03

流量复制--实验测试

1、下载nginx,解压缩,运行cmd,使用命令进行操作,不要直接双击nginx.exe,不要直接双击nginx.exe,不要直接双击nginx.exe

一定要在dos窗口启动,不要直接双击nginx.exe,这样会导致修改配置后重启、停止nginx无效,需要手动关闭任务管理器内的所有nginx进程,再启动才可以。

2、启动nginx服务,启动时会一闪而过是正常的

start nginx

3、查看任务进程是否存在,dos或打开任务管理器都行

tasklist /fi "imagename eq nginx.exe"

4、如果程序没启动就直接start nginx启动,如果已经启动了就使用以下命令重新加载配置文件并重启

nginx -s reload

之后就打开浏览器访问刚才的域名及端口http://localhost:80,出现欢迎页就说明部署成功了

5、启动web服务

这里偷个懒,用之前gor的一些半成品模拟两个server

d:goreplaygor file-server :8000gor file-server :8001

6、配置NGINX

 upstream zs { server 127.0.0.1:8000; } upstream cs { server 127.0.0.1:8001; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location /{ #access_log D:ginxaccess.log accesslog; mirror /mirror; mirror_request_body on; proxy_pass http://zs; } # 镜像站点配置 location /mirror { internal; # 内部配置 proxy_pass http://cs$request_uri; proxy_pass_request_body on; # Indicates whether the original request body is passed to the proxied server. default value is on proxy_set_header X-Original-URI $request_uri;  } }}

7、访问地址:http://localhost/goreplay-1.0.0/

可以看到两边都有对应的请求。


这个办法也是一个解决方案,对线上压力也比较小,不过用户访问生产服务器请求被nginx复制发送给测试服务器时,mirror不会输出http返回内容,这里就需要另外配置了。

另外一点就是不会保存流量下来,无法做到随时随地重放,只能说折中吧,还得继续研究。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

game module 停止运行_详解流量复制解决方案--NGINX的ngx_http_mirror_module模块实现相关推荐

  1. 指定module_详解流量复制解决方案--NGINX的ngx_http_mirror_module模块实现

    概述 因为我们的接口环境是在winserver上,而gor又刚好没对应版本(网上很多办法都试过了...哪位朋友测试过可以的话指点下),所以用了nginx的ngx_http_mirror_module模 ...

  2. 大脑构造图与功能解析_大脑的结构和功能分区_详解人脑构造与功能

    大脑的结构和功能分区 _ 详解人脑构造与功能 学习,可以开阔人的大脑 ; 学习,可以使人的大脑拥有更多的知识,人的大脑和肢 体一样,多用则灵,不用则废.那么下面学习啦小编给大家分享一些大脑的结构和功 ...

  3. mtk手机芯片资料详解和问题解决方案

    MTK手机芯片详细总纲 前联发科技已开发出MT6205.MT6217.MT6218.MT6219.MT6226.MT6227.MT6228等系列平台,其中MT6205.MT6217.MT6218.MT ...

  4. 流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等

    概述 对于一些有并发要求的业务,特别是对接外部流量时,产品上线前一定要做的就是压力测试,但是常规的压力测试并不能覆盖所有情况.以gemeter.ab,.webbench.http_load为例,这些通 ...

  5. python中有那几种赋值_详解Python列表赋值复制深拷贝及5种浅拷贝

    概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅拷贝.深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新 ...

  6. linux 查看网络流量来源_详解Linux查看实时网卡流量的几种方式

    在工作中,我们经常需要查看服务器的实时网卡流量.通常,我们会通过这几种方式查看Linux服务器的实时网卡流量. 1. sar -n DEV 1 2 sar命令包含在sysstat工具包中,提供系统的众 ...

  7. 一点就分享系列(实践篇6——上篇)【迟到补发_详解yolov8】Yolo-high_level系列融入YOLOv8 旨在研究和兼容使用【3月份开始持续补更】

    一点就分享系列(实践篇5-补更篇)[迟到补发]-Yolo系列算法开源项目融入V8旨在研究和兼容使用[持续更新] 题外话 [最近一直在研究开放多模态泛化模型的应用事情,所以这部分内容会更新慢一些,文章和 ...

  8. python列表拆包_详解python 拆包可迭代数据如tuple, list

    详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...

  9. dumpbin发现没有入口函数_详解VS2019 dumpbin查看DLL的导出函数

    之前有人问过ViewDLL这些软件在哪下载.实际上使用VS就可以查看DLL的导出接口. 1.先打开VS内部的Power Shell 2.打开以后应该如下图所示,首先输入dumpbin查看下用法: 3. ...

最新文章

  1. Halcon:(3)铝板检测与角点坐标计算
  2. Python基于MASK信息抽取ROI子图实战:原始影像和mask文件都是二维的情况
  3. 无生命的AI算不上「智能」
  4. OVS数据库操作(四十七)
  5. mysql order 关键字_PHP数据库MySQL Order By 关键词 - PHP教程
  6. 《剑指Offer》 矩形覆盖
  7. 小书匠编辑器使用手册
  8. VS2015 error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
  9. vue中如何实现pdf文件预览?
  10. WPF 程序加载PGIS性能问题
  11. 行测测评——矩阵、圆形、环形三角图形数列推理解题技巧
  12. android psd预览图软件,来自psd的Android Vector drawable具有空预览
  13. 录像机人机界面蓝屏怎么处理
  14. python属于什么类型的选修课_河北大学python选修课00次作业
  15. 基于Matlab的机器人学建模学习资料大整理
  16. 大数据应用“情感趋同现象”伦理风险问题刍议
  17. 如何利用Web of Science进行科学研究
  18. 第二章练习题(2):计算圆柱面积和体积
  19. qq登录 适用于 laravel
  20. 手把手教你用手机轻松制作精美封面,封面不够吸引人?

热门文章

  1. 基于JAVA+SpringMVC+Mybatis+MYSQL的闲置物品交易平台
  2. python date2num_坚持mdates.date2num
  3. JAVA 类加载机制学习笔记
  4. kubernetes下的Nginx加Tomcat三部曲之一:极速体验
  5. Python对象引用和del删除引用
  6. 动态修改attr里的多个属性
  7. 使用CCDirector的notificationNode来创建独立的信息提示层
  8. c# 修饰词public, protected, private,internal的区别
  9. linux内核驱动ldd3_走进linux 驱动开发 之 内核模块
  10. 五大领域总目标指南_每日干货 | 五大领域 学前社会教育1