如何将Nginx数据复制到两个服务器?


14

我正在尝试将一台特定Nginx服务器收到的流量复制到两台服务器。目标不是负载均衡,而是在所有nginx服务器上重放相同的输入。

一个示例:Nginx接收HTTP POST。我想将此相同的POST发送到其他服务器。

**更新**

这种情况既简单又复杂。我只需要将POST数据(或GET或任何请求数据)重新发送到另一个服务器IP(它也运行nginx实例)。只是它。

用户-> POST数据-> NGINX实例----重定向--->服务器1和服务器2


1
您可以扩展您的体系结构吗?另外两台服务器是什么?是否有共享的数据库,共享的文件系统等?POST是否将数据写入数据库,文件系统?实际上,您正在尝试完成哪些操作,这些操作是集群文件系统和数据库实例无法完成的?
cjc 2012年

我改写了您的问题,以更准确地反映您似乎在问的问题。
gWaldo

1
这种类型的行为,有时使用在A / B测试
gWaldo

2
那不是要走的路,您要破坏HTTP,w3.org / Protocols / rfc2616 / rfc2616.html
Daniel Prata Almeida

我已经看过这类问题了。我认为您想要查找的内容可以搜索为“ http重播”。
gWaldo

Answers:


10

我能够使用post_action状态进行复制。

upstream main_upstream {
least_conn;
server 192.168.9.10:80;
keepalive 1024;
}

server {
listen 80;
server_name _;
client_body_buffer_size 1512k;
client_max_body_size 10m;

location /1/ {
fastcgi_pass main_upstream;
post_action @replayevent ;

}
# Send the post_action request to a FastCGI backend for logging.
location @replayevent {
fastcgi_pass 192.168.9.14:80;
}

现在,它向两个服务器发送数据。

如果您的上游不支持fastcgi(在我的情况下发生),请替换为proxy_pass。


4

我不相信您可以单独使用nginx做到这一点;快速阅读Nginx文档的相关内容(上游和代理指令)并不建议您这样做。如评论中所述,这也破坏了HTTP,因为不清楚两个后服务器中的哪一个将响应。

一种替代方法是使用类似varnish的东西,并使用varnishreplay对第二台后服务器进行重播:

https://www.varnish-cache.org/docs/2.1/reference/varnishreplay.html

我没有使用过它,所以我不知道您是否可以使其与第一台后服务器几乎同时回放流量。



2

使用像NFS服务器这样的中央存储,每个nginx Web节点都将挂载NFS共享(文件级)。或使用OCFS2之类的群集文件系统,并且每个Web节点都将挂载LUN /分区(块级)。


POST请求不一定会将内容写入文件系统。我们需要澄清OP的体系结构。
cjc 2012年

@cjc,真的,我被字里行间...
HTTP500
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.