目前,客户正在将数据上传到旧的网络服务器,但我们希望客户开始将数据上传到新的服务器。
然而,我们希望当前的上传能够继续到旧服务器,而新的上传则通过新服务器进行。
在旧服务器的所有上传完成后,我们希望所有新请求都发送到新服务器。
我想知道是否可以使用 NGINX 代理来实现这一点?
该代理还应该能够处理网络套接字。
可能的想法:
- 切换代理服务器的命令(或功能),无需重新启动代理,并且特定于一个连接。
- 配置中的一个条件是,当旧服务器上的作业完成后,代理将请求传递到新服务器。
答案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 reload
或kill -HUP <nginx_pid>
。就你的情况而言,这可能是你为了获得一个优雅的切换而要做的事情,而不是关闭point
1 并进行故障转移。
upstream uploadpoint {
server point2.example.com;
server point1.example.com backup;
}
当 nginx 重新加载时,它允许连接耗尽(我相信这是您所要求的)所有现有内容,然后再发送新内容。
您还需要审查周围的各种选择proxy_pass
,尤其是[proxy_next_upstream][2]
。