在服务器B(服务器B)上完成一项工作后,NGINX代理服务器能否将请求传递给(服务器A)?

目前,客户端正在将数据上传到旧的Web服务器,但我们希望客户端开始将数据上传到新的服务器。

但是,我们希望当前上传到旧的服务器继续,而新的上传通过新的服务器。

所有上传到旧服务器完成后,我们希望所有新的请求去新的服务器。

我想知道这是否可以用NGINX代理来完成?

代理也应该能够处理networking套接字。

可能的想法:

  1. 一个命令(或函数),将切换代理服务器,而不重新启动代理,并且是特定于连接。
  2. configuration中的条件将告诉代理在旧服务器上完成作业后将请求传递到新服务器。

这应该与nginx使用上游以及可选的nginx重新加载几乎“一起工作”。 我不确定在这方面“特定的连接”是什么意思,但是对你的设置做了一些假设…

假设上传点应用程序将被称为“上传点”,并且最初将指向point1,并且该point2是您想要将其移至的点:

 upstream uploadpoint { server point1.example.com; server point2.example.com backup; } 

(有关健康检查等的其他参数,请查看官方上游文档 )。 然后在你的服务器块内,你可以指向那个位置:

 server { listen 80; server_name public.example.com; location /upload { proxy_pass http://uploadpoint/doupload/; } } 

在这种情况下,你有一个上游,它倾向于“point1”,但一旦下降,一切都将自动开始去点2。 在某些时候,你可以切换主backup (或者甚至根据你是否想要backup删除旧的),然后发出一个service nginx reload或者kill -HUP <nginx_pid>在你的情况下,这可能是你会得到一个优雅的开关,而不是让第一point和故障转移

 upstream uploadpoint { server point2.example.com; server point1.example.com backup; } 

当nginx重新加载时,在发送新东西之前,它允许连接耗尽(我相信是你要求的)任何存在的东西。

你也会想[proxy_next_upstream][2] proxy_pass的各种选项,特别是[proxy_next_upstream][2]