个人学习笔记,谢绝转载!!!

原文:https://www.cnblogs.com/wshenjin/p/11850386.html


关于gor:

参考:

https://www.cnblogs.com/jinjiangongzuoshi/p/11773070.html

https://github.com/buger/goreplay/wiki/Getting-Started

这篇小记主要是记录gor不支持https流量镜像的一种解决思路

https流量镜像

1、在nginx proxy 配置 post_action(或者mirror),实现https流量镜像出http流量到gor

server
{
listen 80;
      listen       443;
      server_name  tt.example.com;
      index index.html index.php;
      root  /data/web/webclose;
      location / {
            expires off;
            proxy_redirect     off;
            proxy_set_header   Host             tt.example.com;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_pass https://1.1.1.1:443;
#配置post_action
            post_action @tt_http;
#或者配置mirror
mirror /mirror;
mirror_request_body on; #指定是否镜像请求body部分,此选项与proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering和 uwsgi_request_buffering冲突,一旦开启mirror_request_body,则请求自动缓存;
      }
#mirror
location /mirror {
internal; #指定此location只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)
proxy_redirect off;
proxy_set_header Host tt.example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://1.1.1.2:8080$request_uri; #原始uri不会镜像,可以通过$request_uri变量取得原始请求的uri
proxy_set_header X-Original-URI $request_uri;
}
#post_action
      location @tt_http {
            expires off;
            proxy_redirect     off;
            proxy_set_header   Host             tt.example.com;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_pass http://1.1.1.2:8080;
      }
      include deny_file.conf;
      include ssl.conf;
      access_log  /data/logs/$host.log  access;
}

2、在1.1.1.2上启动gor 监听8080端口,并将http流量输出到文件

./gor --http-pprof :8080  --input-raw :8080  --input-raw-realip-header "X-Real-IP"  --output-file /tmp/goreplay/requests.gor

ps: 输出的文件似乎是被切割的?requests_0.gor、requests_1.gor、requests_2.gor ....

3、利用gor导出的文件,对测试环境进行模拟请求

./gor --input-file /tmp/goreplay/requests_1.gor --output-http="http://t0.example.com"

从测试上看,go_action和mirror的区别在于:

  1. go_action会等待真实的请求完成,再进行镜像请求,而这个等待过程不影响ngx worker进程接受处理其他的请求
  2. mirror,向后端发送真实的请求后,不会等待结果而是直接开始镜像请求

nginx mirror/post_action+gor实现https流量复制的更多相关文章

  1. gor实现线上HTTP流量复制压测引流

    一.使用背景 gor 是一款go语言实现的简单的http流量复制工具,它的主要目的是使你的生产环境HTTP真实流量在测试环境和预发布环境重现.只需要在 代理例如nginx入口服务器上执行一个进程,就可 ...

  2. Nginx流量复制

    1. 需求 将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: 可以验证功能是否正常,以及服务的性能: 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问: 这跟灰度发布还 ...

  3. 高并发 Nginx+Lua OpenResty系列(11)——流量复制/AB测试/协程

    流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线.这其实就需要进 ...

  4. nginx配置SSL证书实现https服务

    在前面一篇文章中,使用openssl生成了免费证书 后,我们现在使用该证书来实现我们本地node服务的https服务需求.假如我现在node基本架构如下: |----项目 | |--- static ...

  5. TCPCopy 线上流量复制工具

    TCPCopy是一种重放TCP流的工具,使用真实环境来测试互联网服务器上的应用程序. 一.描述: 虽然真实的实时流量对于Internet服务器应用程序的测试很重要,但是由于生产环境中的情况很负责,测试 ...

  6. Nginx使用SSL模块配置https

    背景 开发微信小程序,需要https域名,因此使用Nginx的SSL模块配置https 步骤 一.去域名管理商(如腾讯云.阿里云等)申请CA证书 二.在Nginx中配置,一般情况下域名管理商会提供配置 ...

  7. 使用traefik进行流量复制

    文章转载自:https://mp.weixin.qq.com/s/nMMN7hAJK6SFn1V1YyxvHA Traefik 2.0 还引入了镜像服务,一种可以将流入流量复制并同时将其发送给其他服务 ...

  8. nginx服务器http重定向到https的正确写法

    http重定向到https使用了nginx的重定向命令.那么应该如何写重定向?之前老版本的nginx可能使用了以下类似的格式. rewrite ^/(.*)$ http://domain.com/$1 ...

  9. wireshark解密本地https流量笔记

    此方式支持firefox,chrome 建立path变量 SSLKEYLOGFILE=c:\ssl.key 重启firefox chrome,访问https网站会自动生成ssl session key ...

随机推荐

  1. HBase 介绍

    HBase的列族式存储 列族式存储的概念 HBase Table的组成 Table = RowKey + Family + Column + Timestamp + Value 数据存储模式 (Row ...

  2. 微信小程序的跳转navigateTo()和redirectTo()用法和区别

    原文链接:https://blog.csdn.net/u013128651/article/details/79736410  wx.navigateTo({}) ,保留当前页面,跳转到应用内的某个页 ...

  3. tensorflow运行时openssl与boringssl兼容性问题

    tensorflow中,grpc使用boringssl进行加密,boringssl是google基于openssl自行开发的一条分支,有许多相同函数,但底层实现以及支持的加密类型有不同. 且tenso ...

  4. plupload如何限制上传文件数量,限制只能上传单个文件

    1 完整代码 $(function() { $("#uploader").pluploadQueue({ runtimes : 'html5,gears,flash,silverl ...

  5. SpringMVC返回JSON数据时日期格式化问题

    https://dannywei.iteye.com/blog/2022929 SpringMVC返回JSON数据时日期格式化问题 博客分类: Spring   在运用SpringMVC框架开发时,可 ...

  6. [LeetCode] 283. Move Zeroes 移动零

    Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...

  7. Kubernetes 服务质量 Qos 解析 - Pod 资源 requests 和 limits 如何配置?

    QoS是 Quality of Service 的缩写,即服务质量.为了实现资源被有效调度和分配的同时提高资源利用率,kubernetes针对不同服务质量的预期,通过 QoS(Quality of S ...

  8. 使用transform后z-index失效的解决方法

    transform作用的元素增加translateZ,父级元素增加 transform-style: preserve-3d; <div class="father"> ...

  9. javascript循环遍历数组输出key value

    javascript循环遍历数组输出key value用$.each方法肯定不行的 所以采用如下方法<pre> markers = []; markers[2]=3; markers[3] ...

  10. 轮胎魔术公式(Magic Fomula)模型

    魔术公式是用三角函数的组合公式拟合轮胎试验数据,用一套形式相同的公式就可以完整地表达轮胎的纵向力Fx.侧向力Fy.回正力矩Mz.翻转力矩Mx.阻力矩My以及纵向力.侧向力的联合作用工况,故称为“魔术公 ...