Маршрут по умолчанию с использованием node-http-proxy?

Я хочу создать простой обратный прокси-сервер node.js для размещения нескольких приложений Node.JS вместе с моим сервером apache на одном и том же порту 80. Поэтому я нашел этот примерВот

var http = require('http')
, httpProxy = require('http-proxy');

httpProxy.createServer({
    hostnameOnly: true,
    router: {
        'www.my-domain.com': '127.0.0.1:3001',
        'www.my-other-domain.de' : '127.0.0.1:3002'
    }
}).listen(80);

Проблема в том, что я хочу, чтобы app1.my-domain.com указывал на localhost: 3001, app2.my-domain.com указывал на localhost: 3002, а все остальные, например, на порт 3000, где мой сервер apache будет работать Я не смог найти в документации ничего о том, как установить & quot; default & quot; маршрут.

Есть идеи?

EDIT Я хочу сделать это, потому что у меня есть много доменов / поддоменов, обрабатываемых моим сервером Apache, и я не хочу изменять эту таблицу маршрутизации каждый раз, когда мне нужно добавить новый поддомен.

Ответы на вопрос(2)

Решение Вопроса

В течение почти года я успешно использовал принятый ответ, чтобы иметь хост по умолчанию, но теперь намного проще, когда node-http-proxy допускает использование RegEx в таблице хостов.

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

var options = {
  // this list is processed from top to bottom, so '.*' will go to
  // '127.0.0.1:3000' if the Host header hasn't previously matched
  router : {
    'example.com': '127.0.0.1:3001',
    'sample.com': '127.0.0.1:3002',
    '^.*\.sample\.com': '127.0.0.1:3002',
    '.*': '127.0.0.1:3000'
  }
};

// bind to port 80 on the specified IP address
httpProxy.createServer(options).listen(80, '12.23.34.45');

Требует, что у вас нетhostnameOnly установите в true, иначе RegEx не будет обработан.

 Alexandre Blin26 июн. 2013 г., 11:01
Благодарю. Тогда я приму этот ответ, поскольку он более актуален.
 04 апр. 2017 г., 20:55
Похоже, что после этого ответа эта функциональность переместилась в отдельный модуль, http-proxy-rules.github.com/donasaur/http-proxy-rules
 09 окт. 2017 г., 15:25
по-видимомуrouter был удален давным-давно.blog.nodejitsu.com/node-http-proxy-1dot0

Это не запекается в node-http-proxy, но его просто кодировать:

var httpProxy = require('http-proxy'),
    http = require('http'),
    addresses;

    // routing hash
addresses = {
  'localhost:8000': {
    host: 'localhost',
    port: 8081
  },
  'local.dev:8000': {
    host: 'localhost',
    port: 8082
  },
  'default': {
    host: 'xkcd.com',
    port: 80
  }
};

// create servers on localhost on ports specified by param
function createLocalServer(ports) {
  ports.forEach(function(port) {
    http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/html'});
      res.end('<h1>Hello from ' + port + '</h1');
    }).listen(port);
  });
  console.log('Servers up on ports ' + ports.join(',') + '.');  
}
createLocalServer([8081, 8082]);

console.log('======================================\nRouting table:\n---');
Object.keys(addresses).forEach(function(from) {
  console.log(from + ' ==> ' + addresses[from].host + ':' + addresses[from].port);
});

httpProxy.createServer(function (req, res, proxy) {
  var target;

      // if the host is defined in the routing hash proxy to it
      // else proxy to default host
  target = (addresses[req.headers.host]) ? addresses[req.headers.host] : addresses.default;

  proxy.proxyRequest(req, res, target);
}).listen(8000);

Если вы зайдете на локальный хост на порт 8000, он перейдет через локальный хост на порт 8081.

Если вы посещаете 127.0.0.1 через порт 8000 (который не определен в нашем хеше маршрутизации), он перейдет к «местоположению» по умолчанию, а именно к xkcd.com на порту 80.

 Alexandre Blin10 июн. 2012 г., 20:26
Это работает, большое спасибо!

Ваш ответ на вопрос