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

You*_*Kim 6 nginx uwsgi

我有一个在 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) 像传统服务器一样处理请求,但不响应用户(只是记录)

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

You*_*Kim 17

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

我为此使用了post_action指令

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

location @post_action {
    proxy_pass      http://dst_host:dst_port; 
}
Run Code Online (Sandbox Code Playgroud)

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

它就像一个魅力!