复制并传递请求到另一个 nginx 服务器进行真实流量测试

复制并传递请求到另一个 nginx 服务器进行真实流量测试

我有一个在 uwsgi+nginx 上运行的 Flask web 服务,并且运行良好。

我有另一个开发版本的服务,运行在另一台服务器上。它也运行在 uwsgi+nginx 上。

我想要做的是,用“真实”流量(POST 请求)测试开发服务器。我已经验证了开发服务器基本运行良好。只是想用相同的真实流量比较两者。

我的基本想法如下:

(A)是旧服务器(B)是测试服务器

  1. 用户请求

  2. Nginx(A)获取请求并将请求传递给uwsgi(A)进行处理。

  3. Nginx(A)“复制”请求并将其传递给 Nginx(B)进行测试

  4. uwsgi(A) 处理 Flask App(A) 中的请求并响应给用户(通过 Nginx(A))

  5. Nginx(B)像传统服务器一样处理请求,但不响应用户(仅记录)

这有意义吗?我应该采取什么方法?

答案1

我自己找到了解决方案。所以我在这里分享我的发现。

我用了后动作指示为了这。

location / {
    uwsgi_pass      unix:app.sock;
    post_action @post_action; 
}

location @post_action {
    proxy_pass      http://dst_host:dst_port; 
}

请求首先传递到 unix:app.sock,当它完成时,post_action 指令将请求传递到命名位置 @post_action。

它非常有效!

答案2

location / {
      proxy_pass  http://y.y.y.y:port;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_connect_timeout      300;
      proxy_send_timeout         300;
      proxy_read_timeout         300;
      post_action @post_action;
    }

location @post_action {
    proxy_pass      http://x.x.x.x:port;
    access_log /var/log/nginx/c.log application;
    error_log /var/log/nginx/c.log error;
}

请求首先发送给http://yyyy:端口并且当它完成时,post_action 无法指令将请求传递给命名位置 @post_action。我们还需要做其他事情吗?

相关内容