Node.js “基本节点网站返回”;无法获取/quot;当使用forever.js托管时

Node.js “基本节点网站返回”;无法获取/quot;当使用forever.js托管时,node.js,express,node-http-proxy,Node.js,Express,Node Http Proxy,我正在尝试建立我的第一个生产节点网站(在我的生产web服务器上只是一个基本的hello world) 下面是我使用的(基本http代理将apache网站传递到端口:9000,将节点网站传递到端口:8000)。我知道这部分是有效的,因为apache vHost是按照我的预期转发的。然而,节点部分不起作用——相反,我得到了下面的错误 "Cannot GET /" 这是在Ubuntu12.04上运行Node0.8.1 我用forever.js(forever start foo.js)来主持这个项目

我正在尝试建立我的第一个生产节点网站(在我的生产web服务器上只是一个基本的hello world)

下面是我使用的(基本http代理将apache网站传递到端口:9000,将节点网站传递到端口:8000)。我知道这部分是有效的,因为apache vHost是按照我的预期转发的。然而,节点部分不起作用——相反,我得到了下面的错误

"Cannot GET /"
这是在Ubuntu12.04上运行Node0.8.1

我用forever.js(forever start foo.js)来主持这个项目。当我回显节点_ENV时,它显示“生产”

还可能需要注意的是,路径上没有node_模块(您将在我的require语句中看到)**不确定这是否与我的问题有关

var httpProxy = require('/usr/local/lib/node_modules/http-proxy/lib/node-http-proxy');
var express = require('/usr/local/lib/node_modules/express/lib/express');

httpProxy.createServer(function (req, res, proxy) {

    var nodeVhosts = ['www.mysite.com'];
    var host = req.headers['host'];
    var port = nodeVhosts.indexOf(host) > -1
        ? 8000
        : 9000;

    proxy.proxyRequest(req, res, {host: 'localhost', port: port});
}).listen(80);

var one = express.createServer();
one.get('/', function(req, res){
  res.send('Hello from app one!')
});

var app = express.createServer();
app.use(express.vhost('localhost', one));
app.listen(8000);

http代理
模块不会更改请求的主机头,这就是
connect/express
vhost
用来区分虚拟主机的内容

在这方面:

proxy.proxyRequest(req, res, {host: 'localhost', port: port});
您告诉代理服务器将未更改的请求代理到
localhost:port

因此,您需要做的是改变:

var app = express.createServer();
app.use(express.vhost('localhost', one));
app.listen(8000);
致:

它应该会起作用


或者,在代理之前,您可以简单地将
req.headers.host
设置为
localhost

由于您正在运行Ubuntu,您可以查看upstart。如果您不知道,upstart将取代老式的unix初始化脚本方法来启动和停止服务。(那是黑暗、可怕的日子!)如果你想让你的应用程序在机器启动/重新启动时自动启动,并在它(你的应用程序)崩溃后自动重启,那么你就需要upstart。学习upstart的基础知识很容易,然后你就有了一个可以反复使用的工具,无论是node、apache、nginx、postfix、mongodb、mysql等等

我的意思不是不尊重那些在“永远”模块上工作的好人。可以说,它确实有一个可靠的用例,但它常常被用来不完美地复制系统中已经存在的基础——upstart。此外,您可能会在谷歌上搜索一些经验丰富的用户和一些node.js提交者对node.js的可分叉性和陷阱的评论,这些评论与forever非常相关

我想发布链接,但我还没有足够的代表。希望我写的东西足够谷歌搜索


祝你好运

真棒=>这让我现在朝着正确的方向前进!感谢您的时间和详细的答复!有趣的是,我实际上编写了一个upstart脚本,使用forever运行它(我应该使用node吗(从upstart脚本就是node))?我原以为永远是web代理更安全的运行时?事实上,我和许多其他老掉牙的unix狗运行节点应用程序,每一个都是由upstart管理的服务。较少的运动部件通常更安全。我使用upstart将节点可执行文件作为www数据执行。生活是美好的。听起来我们有相似的安排。我正在运行nginx作为我的反向代理(1)一个节点“虚拟反向代理”,处理四个不同的节点webapps;(2) bugzilla实例;和(3)一个丢失小狗的登录页。我真的很喜欢用node设置vhost是多么容易。你介意给我发一封包含你的upstart脚本的电子邮件吗?我的当前正在以root用户身份运行(但在将最终vhost脚本推送到生产环境之前,我需要切换此选项)Sure Toran。早上我到办公室的第一件事。
var app = express.createServer();
app.use(express.vhost('www.mysite.com', one));
app.listen(8000);