我有一个在 uwsgi+nginx 上运行的 Flask web 服务,并且运行良好。
我有另一个开发版本的服务,运行在另一台服务器上。它也运行在 uwsgi+nginx 上。
我想要做的是,用“真实”流量(POST 请求)测试开发服务器。我已经验证了开发服务器基本运行良好。只是想用相同的真实流量比较两者。
我的基本想法如下:
(A)是旧服务器(B)是测试服务器
用户请求
Nginx(A)获取请求并将请求传递给uwsgi(A)进行处理。
Nginx(A)“复制”请求并将其传递给 Nginx(B)进行测试
uwsgi(A) 处理 Flask App(A) 中的请求并响应给用户(通过 Nginx(A))
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。我们还需要做其他事情吗?