NGINX 代理服务器在(服务器 B)上完成一项任务后可以将请求传递给(服务器 A)吗?

NGINX 代理服务器在(服务器 B)上完成一项任务后可以将请求传递给(服务器 A)吗?

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

然而,我们希望当前的上传能够继续到旧服务器,而新的上传则通过新服务器进行。

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

我想知道是否可以使用 NGINX 代理来实现这一点?

该代理还应该能够处理网络套接字。

可能的想法:

  1. 切换代理服务器的命令(或功能),无需重新启动代理,并且特定于一个连接。
  2. 配置中的一个条件是,当旧服务器上的作业完成后,代理将请求传递到新服务器。

答案1

这应该几乎“只适用于”使用上游的 nginx 以及可选的 nginx 重新加载。我不确定您在此上下文中所说的“特定于连接”是什么意思,但对您的设置做了一些假设...

假设上传点应用程序将被称为“uploadpoint”,并且最初它将被命名为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”,但一旦它关闭,一切都将自动开始转到point2。在某个时候,您可以切换主节点和backup(或者甚至删除旧的,具体取决于您是否想要一个辅助节点)并发出service nginx reloadkill -HUP <nginx_pid>就你的情况而言,这可能是你为了获得一个优雅的切换而要做的事情,而不是关闭point1 并进行故障转移

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

当 nginx 重新加载时,它允许连接耗尽(我相信这是您所要求的)所有现有内容,然后再发送新内容。

您还需要审查周围的各种选择proxy_pass,尤其是[proxy_next_upstream][2]

相关内容