我正在努力建立我的第一个生产节点网站(在我的生产网络服务器上只是一个基本的hello世界)。
以下是我正在使用的(基本的http代理将apache网站传递到端口:9000和节点网站到端口:8000)。我知道这部分是有效的,因为apache vhosts正如我所期望的那样被转发。然而,什么不起作用的是节点部分 - 我得到下面的错误
"Cannot GET /"
这是在Ubuntu 12.04上运行节点0.8.1
我用forever.js托管这个(永远启动foo.js)。当我回应NODE_ENV时 - 显示“生产”
还可能会注意到我在路径上没有node_modules(正如您在我的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);
答案 0 :(得分:1)
http-proxy
模块不会更改请求的主机头,这就是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);
为:
var app = express.createServer();
app.use(express.vhost('www.mysite.com', one));
app.listen(8000);
它应该有用。
或者,您可以在代理之前将req.headers.host
设置为localhost
。
答案 1 :(得分:1)
由于你正在运行Ubuntu,你可以看一下暴发户。如果你不知道,upstart将取代old-school-unix init-scripts方法来启动和停止服务。 (那些是黑暗,可怕的日子!)如果你希望你的应用程序在你的盒子启动/重启时自动启动并在它(你的应用程序)崩溃后自动重启,那么你想要新贵。学习upstart的基础知识很简单,然后你有一个可以反复使用的工具,无论是节点,apache,nginx,postfix,mongodb,mysql,等等!
我的意思是对那些在永远模块上工作的好人没有不尊重。可以说,它确实有一个坚实的用例,但它经常用于不完美地复制已经在你的系统上的基岩 - 新贵。另外,谷歌可能会对有经验的用户和一些node.js提交者提出的一些关于node.js的可分离性和陷阱的评论,这些评论与永远非常相关。
我想发布链接,但我还没有足够的代表。希望我写的内容足以谷歌。
祝你好运!