2016-01-06 19 views
0

我有一个移动应用程序,它依赖于托管在Microsoft Azure VM上的node.js服务器。我目前正在创建一个新的Azure虚拟机,我希望所有的API都可以直接使用,但由于我已经在Google Play上发布了该应用,因此已经下载该应用的用户将拥有将所有API调用指向旧的代码VM。我想向旧VM的服务器代码添加逻辑,将所有传入的HTTP请求重新路由到新VM,并将来自新VM的响应返回给客户端,即使它们直接向旧VM服务器发送请求。本质上,旧的虚拟机将扮演中间人的角色。有谁知道如何使用Node做到这一点?如何将http请求重新路由到节点中的另一台服务器

+0

旧VM的IP地址是否被硬编码到应用程序中?如果它只是一个域名,那么更新A记录只是微不足道的。否则,您也可以使用Nginx等反向代理(不一定使用Node)。 – yjwong

+0

@yjwong问题是,没有更新应用程序的用户将使代码指向我们试图逐步淘汰的旧VM服务器。新用户将被指向新的/正确的服务器。 –

回答

0

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

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

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

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

  1. 在旧的Azure虚拟机上安装Nginx,并启用模块ngx_http_proxy_module
  2. 配置的Nginx作为反向代理的URL从旧的应用程序访问重定向,请参阅模块ngx_http_proxy_modulehttp://nginx.org/en/docs/http/ngx_http_proxy_module.html的文档或搜索一些相关的文章用关键字nginxreverse proxyredirect
  3. 停止旧Azure VM上的nodejs服务器,并将Nginx端口配置为nodejs端口以为旧应用程序提供服务。
  4. 重新启动nginx并测试旧的应用程序重定向。

注意,对于上述步骤2,请在同一个Azure的互联星空确保这两个Azure的VM(旧&新的),并使用新的Azure的VM的静态私有IP地址(内部),因为一Azure虚拟机不能直接访问其他Azure虚拟机的公有地址。所以你需要使用反向代理中的私有IP地址来设置新的/正确的服务器的远程地址。

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

  1. 创建在Azure上新门户虚拟网络:https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-create-vnet-arm-pportal/
  2. 如何添加静态私有IP地址到现有的VM: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子网中而不会丢失虚拟硬盘,请参阅两个文档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
相关问题