我试图复制一个特定的nginx服务器收到的stream量到两台服务器。 目标不是负载平衡,而是在所有nginx服务器上重放相同的input。
例如:Nginx收到一个HTTP POST。 我想发送这个相同的POST到其他服务器。
**更新**
情况很简单,也不复杂。 我只需要重新发送POST数据(或GET或任何请求数据)到另一个服务器IP(它也运行一个nginx实例)。 只是它。
用户 – >发布数据 – > NGINX INSTANCE —- REDIRECT —>服务器1和服务器2
我不相信你可以用nginx自己做这个; 快速浏览一下nginx文档(上游代理和代理指令)的相关位并不意味着你可以。 正如评论中指出的那样,这也会破坏HTTP,因为两台后端服务器中的哪一台没有反应。
一种替代方法是使用类似清漆的东西,并使用varnishreplay向第二个后端服务器重播:
https://www.varnish-cache.org/docs/2.1/reference/varnishreplay.html
我还没有使用它,所以我不知道是否可以使其与第一台后置服务器几乎同时重播stream量。
我能够使用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_passreplace。
你想要使用什么像EM代理[1]。 它可以轻松处理跨任意数量的服务器分割http请求。 它也正确地处理来自活动服务器的返回数据并阻止其他数据,所以用户不会得到多个响应。
像NFS服务器一样使用中央存储器,每个nginx Web节点安装NFS共享(文件级别)。 或者使用像OCFS2这样的集群文件系统,并且每个Web节点都安装LUN /分区(块级)。