多个域上的 Node.js 使用 express.vhosts()
Posted
技术标签:
【中文标题】多个域上的 Node.js 使用 express.vhosts()【英文标题】:Node.js on multiple domains using express.vhosts() 【发布时间】:2012-12-19 15:14:52 【问题描述】:我又遇到了一个 nodejs 问题,我正在编写一个节点服务器,它允许使用 express.vhost() 在同一系统上运行两个或多个 app.js。但我现在很迷茫。
webhost 服务器是运行 Ubuntu 和 plesk 的专用服务器,我为不同的域分配了 2 个 ip。
xxx.xxx.xxx.123 IP 分配给 domain-one.com xxx.xxx.xxx.xxx.456 分配给 domain-two.com
两者都运行 nodejs 服务器 app.js 并且每个都分配在 /var/www/vhosts/[domain-name]/node/app.js
运行虚拟主机的服务器位于 /var/www/node/server.js 这里是代码
var express = require("express");
var app = express();
app
.use(express.vhost('domain-one.com', require('/var/www/vhosts/domain-one.com/node/app.js').app))
.use(express.vhost('domain-two.com', require('/var/www/vhosts/domain-two.com/node/app.js').app))
.listen(3030);
app.get('/', function(req, res)
res.send('hello world the server running ');
);
在每个 app.js 中
var express = require('express'),
routes = require('./routes');
var app = exports.app = express.createServer();
app.get('/', function(req, res)
res.send('hello world test file for [domain-name] running');
);
//port 3031 for domain-one.com
//port 3032 for domain-two.com
app.listen(3031);
然后我运行 node server.js,一切正常,没有错误。
然后我运行一个 netstat -anltp
tcp 0 0 0.0.0.0:3030 0.0.0.0:* LISTEN 19839/node
tcp 0 0 0.0.0.0:3031 0.0.0.0:* LISTEN 19839/node
tcp 0 0 0.0.0.0:3032 0.0.0.0:* LISTEN 19839/node
好的,一切都按我的预期进行(我想),所以我打开浏览器并输入 domain-one.com:3031 和其他选项卡 domain-two.com:3032
但在两个域中都会出现连接超时...当我运行 domain-one.com:3030 时,它会显示:
hello world 正在运行的服务器
但不是在 domain-two.com:3030 它也挂起..
我想了解一下我的服务器和域是如何工作的,以及如何在我的服务器中为不同的 ip/域运行不同的 nodejs 应用程序......
有时 domain-two.com 会打印 domain-one.com app.js 文件 res.send() 应该在另一个域上打印的内容...
我想我现在很困惑......希望你能帮我解决这个问题..
非常感谢
-伊万
【问题讨论】:
你确定你没有在你的代码中做任何其他事情吗?我刚刚使用您的代码设置了一个基本应用程序,它运行良好。你连接3030时输入的域名是准确的吗?没有多余的www.
或任何东西,对吧?
是.. 如果我从每个域单独运行 app.js(节点 app.js),则 domain-one.com:3031 挂起,但如果我去 domain-two.com :3031 ...它确实加载正确:S奇怪
var/www/ 目录是apache服务器吗?我很想看看你是如何解决这个问题的,因为我正在尝试同样的事情。在我看来,我需要将我的每个 IP 映射到一个唯一的端口,并让节点服务器在该端口上侦听。
【参考方案1】:
使用这种简单而精确的语法可能会更好:https://github.com/expressjs/vhost
//
// Module dependencies
//
var express = require('express');
var vhost = require('vhost');
var app = express();
//
// vhosts
//
app
.use(vhost('app1.io', require('./app1/app.js')))
.use(vhost('app2.io', require('./app2/app.js')))
.use(vhost('app3.io', require('./app3/app.js')))
.listen(8080);
【讨论】:
以上是关于多个域上的 Node.js 使用 express.vhosts()的主要内容,如果未能解决你的问题,请参考以下文章
使用 passport.js 和 express.js (node.js) 制作安全的 oauth API
Node.JS、Express 和 MongoDB :: 多个集合
如何使用在 node.js 上的方法和 express 来获取更新信息