Так что это моя попытка, я застрял. У меня есть веб-сервер apache2 с более чем 10 виртуальными хостами. Все домены привязаны к IP-адресам серверов, а apache маршрутизирует через виртуальные хосты, поэтому каждый домен получает свой правильный контент. Это работает уже много лет. Теперь проблема: теперь у меня есть несколько веб-приложений, написанных с помощью node.js на этом сервере. Когда я хочу запустить приложение, мне нужно вызвать какую-то ссылку, например: mynodeapp.com:3000, в зависимости от порта, на котором я запускаю приложение. Теперь я хочу, чтобы node.js выполнял всю маршрутизацию вместо apache. Я изменил прослушивание apache на порт 9000 и хочу запустить прокси, написанный на узле, который обрабатывает все запросы на порту 80. Я думал, что это возможно с помощью node-http-proxy. Я подумал, что это больше похоже на пересылку, поэтому я попробовал следующее для приложения Node Proxy:
httpProxy = require('http-proxy');
httpProxy.createServer({
forward: {
port: 9000,
host: 'localhost'
}
}).listen(80);
Но это похоже на пересылку всего, что не зависит от req.host. У кого-нибудь есть идея, как это сделать? Мне нужно перенаправить (или прокси) входящие URL-адреса (my.domain.com), получить их и перенаправить в целом на порт 9000 (где работает apache2), чтобы виртуальные хосты в apache могли обрабатывать все остальное .... есть идеи? Лучший Мартин
ОБНОВЛЕНИЕ: Итак, в конце все работает нормально. На самом деле это была проблема с 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...');