Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将http请求重新路由到节点中的其他服务器_Node.js_Http_Azure_Forwarding - Fatal编程技术网

Node.js 如何将http请求重新路由到节点中的其他服务器

Node.js 如何将http请求重新路由到节点中的其他服务器,node.js,http,azure,forwarding,Node.js,Http,Azure,Forwarding,我有一个移动应用程序,它依赖于托管在Microsoft Azure VM上的node.js服务器。我目前正在创建一个新的Azure VM,我希望所有API都指向该VM,但由于我已经在Google Play上发布了该应用程序,已经下载该应用程序的用户将拥有将所有API调用指向旧VM的代码。我想在旧VM的服务器代码中添加逻辑,将所有传入的HTTP请求重新路由到新VM,并将新VM的响应返回到客户端,即使它们直接向旧VM服务器发送请求。基本上,老VM将充当中间人。有人知道如何使用Node进行此操作吗?正

我有一个移动应用程序,它依赖于托管在Microsoft Azure VM上的node.js服务器。我目前正在创建一个新的Azure VM,我希望所有API都指向该VM,但由于我已经在Google Play上发布了该应用程序,已经下载该应用程序的用户将拥有将所有API调用指向旧VM的代码。我想在旧VM的服务器代码中添加逻辑,将所有传入的HTTP请求重新路由到新VM,并将新VM的响应返回到客户端,即使它们直接向旧VM服务器发送请求。基本上,老VM将充当中间人。有人知道如何使用Node进行此操作吗?

正如@yjwong的评论所说,如果您有一个独立的域名来服务旧应用程序并将旧Azure VM的主机名绑定为DNS中的CNAME记录,您可以更改CNAME记录以将新Azure VM的主机名绑定到使用旧应用程序的用户指向新的/正确的服务器

关于CNAME记录,请参阅维基百科条目

否则,您可以安装并使用反向代理(如Nginx)将旧应用程序访问的URL重定向并重写为新/正确服务器的URL

以下是一些步骤,可供参考

  • 在旧的Azure VM上安装Nginx,并启用模块
    ngx\u http\u proxy\u模块
  • 将Nginx配置为反向代理以重定向旧应用程序访问的URL,请参阅模块的文档
    ngx\u http\u proxy\u模块
    ,或使用关键字
    Nginx
    反向代理
    重定向
    等搜索相关文章
  • 停止旧Azure VM上的nodejs服务器,并将Nginx端口配置为nodejs端口以服务旧应用程序
  • 重新启动nginx并测试旧应用程序的重定向
  • 请注意,对于上面的步骤2,请确保两个Azure VM(旧和新)位于同一Azure VNet上,并为新Azure VM使用静态私有IP地址(内部),因为不能允许一个Azure VM直接访问另一个Azure VM的公共地址。因此,您需要使用反向代理中的专用ip地址设置新/正确服务器的远程地址

    您可以参考以下文档为两个Azure虚拟机设置Azure虚拟网络

  • 在Azure新门户上创建虚拟网络:
  • 如何向现有VM添加静态专用IP地址:
  • 如果存在的两个Azure VM不属于任何VNet,您需要将它们移动到VNet子网中,而不会丢失您的虚拟硬盘,请参阅这两个文档和

  • 旧VM的IP地址是否已硬编码到应用程序中?如果它只是一个域名,那么更新a记录就很简单了。否则,您也可以使用反向代理,如Nginx(不一定使用Node)。@yjwong问题是,尚未更新应用程序的用户将有代码指向我们正试图逐步淘汰的旧VM服务器。新用户将被指向新的/正确的服务器。