2016-01-06 16 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
相關問題