如何将http请求重新路由到节点中的另一台服务器

时间:2016-01-06 17:10:42

标签: node.js http azure forwarding

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

1 个答案:

答案 0 :(得分:0)

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

关于CNAME记录,请参阅维基百科条目https://en.wikipedia.org/wiki/CNAME_record

否则,您可以安装和使用像Nginx这样的反向代理重定向&将旧应用访问的网址重写为新/正确服务器的网址。

以下是一些步骤,以帮助您做到这一点。

  1. 在旧的Azure VM上安装Nginx,并启用模块ngx_http_proxy_module
  2. 将Nginx配置为反向代理以重定向来自旧应用访问的网址,请参阅模块文档ngx_http_proxy_module http://nginx.org/en/docs/http/ngx_http_proxy_module.html或使用关键字nginx搜索一些相关文章,reverse proxyredirect
  3. 停止旧Azure VM上的nodejs服务器,并将Nginx端口配置为nodejs端口,以便为旧应用程序提供服务。
  4. 重新启动nginx并测试旧应用程序以进行重定向。
  5. 请注意,对于上面的步骤2,请确保同一Azure VNet上的两个Azure VM(旧版和新版)并使用新Azure VM的静态专用IP地址(内部),因为一个Azure VM不允许直接访问其他Azure VM的公共地址。因此,您需要使用反向代理中的私有IP地址设置新/正确服务器的远程地址。

    您可以参考下面的这些文档,为两个Azure VM设置Azure虚拟网络。

    1. 在Azure新门户网站上创建虚拟网络:https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-create-vnet-arm-pportal/
    2. 如何向现有VM添加静态专用IP地址:https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-static-private-ip-arm-pportal/#how-to-add-a-static-private-ip-address-to-an-existing-vm
    3. 如果存在两个Azure VM不属于任何VNet,则需要将其移至VNet子网而不会丢失虚拟硬盘,请参阅两个文档http://blogs.msdn.com/b/karldb/archive/2013/12/13/moving-an-existing-virtual-machine-into-a-virtual-network-subnet-without-losing-your-virtual-hard-disk-or-your-mind.aspxhttp://blogs.technet.com/b/canitpro/archive/2014/06/17/step-by-step-move-a-vm-to-a-different-vnet-on-azure.aspx。< / LI>