【问题标题】:Running Apache with virtual Hosts behind node.js proxy在 node.js 代理后面使用虚拟主机运行 Apache
【发布时间】:2014-03-05 01:16:05
【问题描述】:

所以这是我的尝试,我被困住了。 我有一个具有 10 多个虚拟主机的 apache2 Web 服务器。所有域都绑定到服务器 ip,并且 apache 通过虚拟主机路由,因此每个域都可以获得正确的内容。这已经工作多年了。 现在是挑战:我现在有一些 webApps,在这台服务器上用 node.js 编写。当我想运行一个应用程序时,我必须调用一些链接,例如:mynodeapp.com:3000,具体取决于我运行应用程序的端口。 我现在希望 node.js 完成所有路由,而不是 apache。我将 apache 的监听更改为 9000 端口,并希望运行一个用 node 编写的代理,它处理端口 80 上的所有请求。我认为使用 node-http-proxy 可以做到这一点。我认为它更像是转发,所以我为节点代理应用尝试了以下操作:

httpProxy = require('http-proxy');

httpProxy.createServer({
  forward: {
    port: 9000,
    host: 'localhost'
  }
}).listen(80);

但这似乎是独立于 req.host 转发所有内容。 有没有人知道如何做到这一点?我需要转发(或代理)传入的 url(my.domain.com)获取它们并将它们作为一个整体转发到端口 9000(运行 apache2 的地方),以便 apache 中的 vhosts 可以处理其余的......任何想法? 最好的 马丁

更新: 好的,所以最后一切正常。这实际上是一个 apache 问题(错误的文件夹目标......多么愚蠢。) 下面我发布了我目前非常好的工作解决方案,它非常简单:

var httpProxy = require('http-proxy');
var http = require('http');
var util = require('util');
var url = require('url');

var options = {
  target: 'some-domain.com:9000',
  target: 'another-domain.com:9000'
}

var proxy = httpProxy.createProxyServer(options);

http.createServer(function(req, res, err) {
  if(err) console.log(err);
  var host = util.inspect(req.headers.host);
  console.log(req.connection.remoteAddress + ' asks for: ' + host + req.url);

  proxy.web(req, res, function(err) {
    if(err) console.log(err);
  });  
}).listen(80);

console.log('Awesome proxy is listening on port 80...');

【问题讨论】:

    标签: javascript node.js apache proxy node-http-proxy


    【解决方案1】:

    Apache 的名称虚拟主机查看请求标头中的主机字段。它们可以全部运行在相同的 IP 和端口上。

    NameVirtualHost *:9000
    
    <VirtualHost *:9000>
      DocumentRoot /var/www/site1
      ServerName site1.com
    </VirtualHost>
    
    <VirtualHost *:9000>
      DocumentRoot /var/www/site2
      ServerName site2.com
    </VirtualHost>
    

    ServerName 指令将虚拟服务器分开

    在您的代理代码中,确保正确填写“主机”字段。

    【讨论】:

      【解决方案2】:

      我遇到了类似的解决方案,将节点应用程序保留在 apache 后面,但通过 apache 80 作为标准虚拟主机运行并连接 node.js 应用程序:

      https://stackoverflow.com/a/30287224/3617531

      希望对大家有帮助

      【讨论】:

        猜你喜欢
        • 2016-06-30
        • 1970-01-01
        • 2013-04-04
        • 1970-01-01
        • 2016-10-28
        • 2019-09-20
        • 2021-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多