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

原文: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. 搭建EOS全节点并接入主网

    #EOS编译安装 #!/bin/bash #install.eos.sh #EOS 安装 #从github克隆主网代码 cd /opt git clone https://github.com/EOS ...

  2. odoo开发笔记 -- 异常处理in resolve_deps field = model

    场景描述: 更新代码,重启服务服务后,odoo后台报错,提示关键字:in resolve_deps field = model._fields[fname]  KeyError: 'entry_id' ...

  3. Nginx 配置 HTTPS SSL 代理

    配置文件如下: #user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.ty ...

  4. 认领该应用 apk空白包签名 方法

    起因: apicloud开发的项目,上架应用宝市场,被要求做这个 解决方法: 下载签名工具,并解压缩.解压缩.解压后是两个文件夹,选择keystore签名工具. 下载地址: linux 签名工具(命令 ...

  5. 转 Linux sudo命令

    脚本中使用$HOME变量 问题描述:某些同事原来写的脚本中包含如下内容. BIN_DIR=${HOME}/tools TAIR_BIN_DIR=${HOME}/tair_binTAIR_SRC_DIR ...

  6. Shell流程控制语句for

    for语法格式: for 变量 in 参数列表 do 命令 done 或者 for 变量 in 参数列表 ; do 命令 done for语句流程控制图: 实例: [root@youxi1 ~]# v ...

  7. ubuntu中cmake版本升级

    在网上下载一个项目,编译提示版本太低 CMake Error at CMakeLists.txt: (cmake_minimum_required): CMake 编译方式安装(需要openssl) ...

  8. Github-Dorks与辅助工具

    前言 Github搜索功能非常强大且有用,可用于在开源出来的Github仓库中搜索敏感数据.可以找到敏感的个人和/或组织信息(例如私钥,凭据,身份验证令牌等). 文中的github dork列表可以在 ...

  9. docker+k8s基础篇二

    Docker+K8s基础篇(二) docker的资源控制 A:docker的资源限制 Kubernetes的基础篇 A:DevOps的介绍 B:Kubernetes的架构概述 C:Kubernetes ...

  10. 倒数第K个结点

    typedef struct Lnode{ int data; struct Lnode *next; }Lnode,*Link; Link fi(Link head,int k){ Link fa ...