这一定是一个非常普遍的问题。我已经看到了各种各样的答案,但似乎没有一个对我有用。
我在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"));
答案 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上开发)没有任何问题。