在Azure上将域指向节点表达服务器

时间:2014-12-18 17:42:26

标签: javascript node.js azure express

这一定是一个非常普遍的问题。我已经看到了各种各样的答案,但似乎没有一个对我有用。

我在Windows Azure上的apache服务器上安装了节点。我的应用程序已经构建好并准备就绪(下面的代码段):

var express = require("express");
var app = express();

//example api call
app.get("/api/example", function(req, res){

  //do some process
  res.send(data);

});

app.listen(8080);
console.log("App listening on port 8080");

现在,在我自己的计算机上进行测试时,我可以转到localhost:8080,效果很好。但是现在我把它放在天蓝色的服务器上,我无法让外部域正确地指向它。例如,我有域名:

framework.example.com 

我已将此添加到Azure中的hosts文件中:

XXX.0.0.01 framework.example.com

最初我尝试编辑http-vhosts.conf以将域指向正确的目录。这适用于加载前端,但应用程序无法与后端通信。 API调用返回400找不到错误。

我也尝试过一种Express vhost方法,但我认为我做错了并且不完全理解它。什么是正确的方法?!

我的应用结构是这样的:

- package.json
- server.js
- server
  - files used by server.js
- public
  - all frontend files

因此,要启动服务器,我运行server.js,它运行顶部的代码。 server.js使用下面的Express配置指向公用文件夹。

app.use(express.static(__dirname + "/public"));

1 个答案:

答案 0 :(得分:0)

将其添加到Azure中的hosts文件将无济于事。您需要将域的DNS配置为指向Azure。我建议您使用Cloud Service实例的DNS名称。如果由于某种原因需要停止,则可能会更改基础VM IP地址,但您的Cloud Service DNS名称配置为始终路由到基础VM。这意味着您需要使用DNS设置CNAME。

在此处详细了解:Cloud Services Custom Domain Name

接下来,您需要在端口80上托管节点应用程序,或者在其前面放置代理以便为您处理。否则,您将无法键入framework.example.com:8080,这是不理想的。在Linux上,您可能需要成为特权用户才能在端口80上托管,但您永远不希望您的节点应用程序具有root权限。您可以使用authbind来解决此问题。

请参阅此处的节点示例:Using authbind with Node.js

所有这一切,似乎你对Linux服务器管理有些新意。如果是这种情况,我强烈建议您尝试使用Azure Websites之类的内容而不是VM。您不再需要管理虚拟机操作系统。您只需告诉它托管您的应用程序,它将负责其余的工作。如果您正在使用github,那么测试和迭代非常容易。它确实在Windows下托管,对于某些应用程序可能会出现问题,但我在那里托管我的所有节点站点(在Mac上开发)没有任何问题。