我正在尝试将一台特定Nginx服务器收到的流量复制到两台服务器。目标不是负载均衡,而是在所有nginx服务器上重放相同的输入。
一个示例:Nginx接收HTTP POST。我想将此相同的POST发送到其他服务器。
**更新**
这种情况既简单又复杂。我只需要将POST数据(或GET或任何请求数据)重新发送到另一个服务器IP(它也运行nginx实例)。只是它。
用户-> POST数据-> NGINX实例----重定向--->服务器1和服务器2
我正在尝试将一台特定Nginx服务器收到的流量复制到两台服务器。目标不是负载均衡,而是在所有nginx服务器上重放相同的输入。
一个示例:Nginx接收HTTP POST。我想将此相同的POST发送到其他服务器。
**更新**
这种情况既简单又复杂。我只需要将POST数据(或GET或任何请求数据)重新发送到另一个服务器IP(它也运行nginx实例)。只是它。
用户-> POST数据-> NGINX实例----重定向--->服务器1和服务器2
Answers:
我能够使用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。
我不相信您可以单独使用nginx做到这一点;快速阅读Nginx文档的相关内容(上游和代理指令)并不建议您这样做。如评论中所述,这也破坏了HTTP,因为不清楚两个后服务器中的哪一个将响应。
一种替代方法是使用类似varnish的东西,并使用varnishreplay对第二台后服务器进行重播:
https://www.varnish-cache.org/docs/2.1/reference/varnishreplay.html
我没有使用过它,所以我不知道您是否可以使其与第一台后服务器几乎同时回放流量。
您要使用的是类似EM-Proxy [1]的东西。它可以轻松处理在任意数量的服务器上拆分HTTP请求的情况。它还可以正确地处理仅从活动服务器返回的数据并阻止其他服务器,这样用户就不会收到多个响应。