nginx中如何实现部分镜像?

nginx中如何实现部分镜像?

我想测试服务器的早期新版本,为此我需要镜像部分我的测试服务器上收到的生产服务器的实际请求。

镜像模块允许我进行镜像全部流量,但我还没有找到如何执行请求的部分镜像,例如,我想镜像30%交通

这可能吗?如果可以,怎么做?

答案1

如果你有两个 Web 服务器,并且你想将 30% 的请求发送到服务器A70% 的请求发送到服务器您可以在两个 Web 服务器前面放置一个负载均衡器。无论如何,您都必须在两个 Web 服务器前面放置一个负载均衡器,否则所有流量只会流向一个服务器或另一个服务器。

使用权重可以指定有多少流量应该流向第一台或第二台服务器。下面给出了一个简单的示例:

http {
  upstream myapp1 {
    server srv1.example.com weight=3;
    server srv2.example.com weight=7;
  }
  server {
    listen 80;
    location / {
      proxy_pass http://myapp1;
    }
  }
}

编辑:由于两台服务器都是生产服务器,因此您可以mirrorsrv1.example.com将 30% 的流量发送到您的测试服务器。同意,这有点卑鄙,所以当有更好的解决方案时,请随意投反对票。

编辑2:如果您只有一台服务器,则将相同的 IP 地址分配给两个 DNS A 记录。

答案2

http {
  ...
  split_clients "${remote_addr}AAA" $mirror_allowed {
    30% 1;
    * "";
  }
}

server {
  ...
  location / {
    ...
    mirror /mirror;
  }

  location /mirror {
    internal;
    if ($mirror_allowed = "") { 
      return 200; 
    }
    proxy_pass https://some.mirror.endpoint$request_uri;
  }
}

相关内容