我正在一起运行Nodejs和Apache。
node-http-proxy正在侦听端口80,然后将请求转发到Apache(:9000)或Express(:8000)。
我在Apache上的虚拟主机如下所示:
<VirtualHost 127.0.0.1> DocumentRoot "/localhost/myVhost" ServerName myVhost </VirtualHost>
我的问题是,在Express / Nodejs端具有虚拟主机功能的“正确”方法是什么?我希望不必像下面建议的那样将每个Nodejs应用程序放在其自己的端口上:
https://github.com/nodejitsu/node-http- proxy (标题为“使用“仅主机名”代理表的代理请求”部分)
我注意到Connect(据我了解,它捆绑在Express中)具有一些虚拟主机功能。我应该使用那个吗?如果是这样,与node-http- proxy一起运行它的正确方法是什么?
http://www.senchalabs.org/connect/middleware- vhost.html
我还注意到了另一个名为“集群”的模块,它似乎是相关的,但是我不确定如何:
http://learnboost.github.com/cluster/
虽然不想让自己不知所措,但我还遇到了一个叫做“ Haibu”的东西,它似乎很相关,但是我不确定这是否可以完全替代使用vhosts:
https://github.com/nodejitsu/haibu
注意:我是前端人员,所以我对很多服务器术语不太熟悉
我从来没有想过Haibu或Cluster。但是我确实找到了解决我问题的好的解决方案。令我惊讶的是,这实际上非常简单。但是,我对服务器了解不多,因此虽然可行,但这可能不是最佳选择。
我在Apache上像往常一样设置了虚拟主机(http://httpd.apache.org/docs/2.0/vhosts/examples.html)
我在Node上安装了以下内容
然后,出于个人风格,我将所有虚拟主机都放在一个公共目录(/ localhost)中
然后,我切换了Apache以侦听端口80以外的其他端口。我刚巧选择了端口9000,因为我看到它在某个地方使用过。(在httpd.conf中,将“ Listen 80”更改为“ Listen 9000”)。我还必须确保将我在Extra / httpd- vhosts.conf中定义的所有虚拟主机都设置为基于IP的名称VirtualHost(127.0.0.1),而不是使用端口(*:80)。
然后,在我的/ localhost目录中,创建了一个名为“ nodeHttpProxy.js”的文件。
然后,在nodeHttpProxy.js中,使用node-http- proxy创建了一个侦听端口80的代理服务器。使用express来包装连接(http://www.senchalabs.org/connect/),创建了虚拟主机。
nodeHttpProxy.js文件如下所示:
// Module dependancies var httpProxy = require('/usr/local/lib/node_modules/http-proxy/lib/node-http-proxy') , express = require('/usr/local/lib/node_modules/express/lib/express'); // Http proxy-server httpProxy.createServer(function (req, res, proxy) { // Array of node host names var nodeVhosts = [ 'vhost1' , 'vhost2' ] , host = req.header('host') , port = nodeVhosts.indexOf(host) > -1 ? 8000 : 9000; // Now proxy the request proxy.proxyRequest(req, res, { host: host , port: port }); }) .listen(80); // Vhosts server express.createServer() .use(express.vhost('vhost1', require('./vhost1/app'))) .use(express.vhost('vhost2', require('./vhost2/app'))) .app.listen(8000);
如您所见,每次创建新的Node虚拟主机时,我都必须做两件事:
当然,我还必须在/ localhost目录中创建实际的主机路径/文件。
一旦完成所有这些,我只需要运行nodeHttpProxy.js:
node nodeHttpProxy.js
您可能会收到一些奇怪的“ EACCESS”错误,在这种情况下,只需以sudo身份运行即可。
它将侦听端口80,并且如果主机与nodeVhosts数组中的名称之一匹配,它将把请求转发到端口8000上的该主机,否则它将请求转发到该端口9000上的主机。