Nginx mirror 流量复制模块

发布时间: 更新时间: 总字数:470 阅读时间:1m 作者: IP上海 分享 网址

nginx ngx_http_mirror_module 模块(自 1.13.4 实现)通过创建后台镜像子请求(mirroring of an original request)来实现原始请求的镜像,镜像子请求的响应将被忽略。

介绍

使用场景

  • 引流测试
  • 复制请求,如 influxdb v2 不支持高可用,可以使用 nginx mirror 将 POST 请求镜像一份到备的 influxdb 中,注意:镜像请求中 token 需要使用 proxy_set_header 设置

配置示例

client_body_buffer_size     10M;
client_max_body_size        10M;

location / {
    mirror /mirror;
    # 多加一份mirror,流量放大一倍
    # mirror /mirror;
    mirror_request_body off;
    proxy_pass http://backend;
}

location = /mirror {
    internal;

    limit_except GET POST {
        deny  all;
    }

    # proxy_pass http://log_backend;
    proxy_pass http://$mirror_backend$request_uri;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
}

说明:

  • original 配置
    • mirror /mirror 指定镜像 uri 为/mirror
      • mirro 配置位置可以为 nginx 配置文件的 http, server, location 中
    • mirror_request_body 表示是否镜像客户端请求正文
      • 启用后,将在创建镜像子请求之前读取客户端请求正文
      • 在这种情况下,由 proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering 和 uwsgi_request_buffering 指令设置的未缓冲客户端请求正文代理功能将被禁用
    • proxy_pass 指定数据转发 server 的地址
  • mirror 配置
    • internal 指定此 location 只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)
    • proxy_set_header 设置镜像流量的头部,可以配置认证等信息
    • limit_except 限制只有 GET POST 允许镜像,其他请求拒绝

其他实现

  • tcpcopy

参考

  1. https://nginx.org/en/docs/http/ngx_http_mirror_module.html
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数