当前位置: 首页 > 面试题库 >

如何与node-http-proxy一起使用虚拟主机?

蓟安歌
2023-03-14
问题内容

我正在一起运行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上安装了以下内容

  • Express(http://expressjs.com/)
  • node-http-proxy(https://github.com/nodejitsu/node-http-proxy)

然后,出于个人风格,我将所有虚拟主机都放在一个公共目录(/ localhost)中

然后,我切换了Apache以侦听端口80以外的其他端口。我刚巧选择了端口9000,因为我看到它在某个地方使用过。(在httpd.conf中,将“
Listen 80”更改为“ Listen 9000”)。我还必须确保将我在Extra / httpd-
vhosts.conf中定义的所有虚拟主机都设置为基于IP的名称VirtualHost(127.0.0.1),而不是使用端口(*:80)。

在“节点”端,我创建了我的应用程序/服务器(也称为节点虚拟主机),该应用程序/服务器在端口8000上侦听(以某种方式任意选择端口号),请参见以下使用Express创建服务器的链接: http
//expressjs.com/guide。 html

然后,在我的/ 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虚拟主机时,我都必须做两件事:

  1. 将虚拟主机名添加到我的“ nodeVhosts”数组中
  2. 使用.set方法定义新的快速虚拟主机

当然,我还必须在/ localhost目录中创建实际的主机路径/文件。

一旦完成所有这些,我只需要运行nodeHttpProxy.js:

node nodeHttpProxy.js

您可能会收到一些奇怪的“ EACCESS”错误,在这种情况下,只需以sudo身份运行即可。

它将侦听端口80,并且如果主机与nodeVhosts数组中的名称之一匹配,它将把请求转发到端口8000上的该主机,否则它将请求转发到该端口9000上的主机。



 类似资料:
  • 问题内容: 请告诉我,什么是部署nodejs应用程序nginx或node-http-proxy的首选方法。什么是最可靠的? 我需要的基本功能是 将所有请求代理到非80个帖子 负载均衡器 Websocket支持 问题答案: 这是一篇有关该主题的出色文章,网址为http://www.exratione.com/2012/07/proxying-websocket- traffic-for-nodejs

  • node-http-proxy 是一个全功能的 Nginx 的 HTTP 代理扩展,支持 WebSocket 。

  • 我有Tomcat(7或8),有两个虚拟主机和两个应用程序克隆,应该可以工作。 每个应用程序都应该有自己的配置文件。它不应该放在*. war中——只能放在服务器环境中的某个地方。 当我在Tomcat中有一个应用程序时,我可以将配置文件放在 这是Spring根据applicationContext查找我的配置文件的方式。xml。 但是当我有两台主机时,我应该将配置文件放在不同的目录中。我在服务器的主机

  • 我正在尝试使用swagger记录akka-超文本传输协议API 我拥有的是: 这会生成一个json,我可以在swagger UI中查看它。但是,我不能使用生成的示例,因为缺少auth选项。 我没有找到任何使用swagger-akka-http的例子,只有一些使用 config的例子 在< code>yaml中,可能是这样的: 但是,我没有。除了通过注释之外,我也不能控制生成的。 在IIUC中,提及

  • 我想做一个简单的Node.js反向代理,将多个Node.js应用程序以及apache服务器托管在同一个端口80上。所以我在这里找到了这个例子 我之所以这么做,是因为我的apache服务器处理了很多域/子域,我不想每次添加新的子域时都必须修改这个路由表。

  • 1.2.2 虚拟一台主机 使用 virtual 虚拟计算机的过程也不算复杂,只需要按照提示配置其相关参数即可