이것이 내 시도입니다. 10 개 이상의 가상 호스트가있는 apache2 웹 서버가 있습니다. 모든 도메인은 서버 ip에 바인딩되고 apache는 가상 호스트를 통해 라우팅되므로 모든 도메인에서 올바른 컨텐츠를 얻을 수 있습니다. 그것은 이미 수년 이래로 효과가 있습니다. 이제 도전 과제 : 이제이 서버에 node.js로 작성된 몇 가지 웹 애플리케이션이 있습니다. 내가 app을 실행하고 싶을 때, 나는 app과 같은 링크를 호출해야한다 : mynodeapp.com : 3000. 이제 node.js가 아파치 대신 모든 라우팅을 수행하기를 원합니다. 아파치의 포트 9000을 바꿔서 포트 80의 모든 요청을 처리하는 노드로 작성된 프록시를 실행하고 싶다. 나는 이것이 node-http-proxy를 사용하여 가능하다고 생각했다. 나는 그것이 전달과 같은 더 생각, 그래서 노드 프록시 응용 프로그램에 대해 다음 시도 :node.js 프록시 뒤에있는 가상 호스트로 Apache 실행
httpProxy = require('http-proxy');
httpProxy.createServer({
forward: {
port: 9000,
host: 'localhost'
}
}).listen(80);
을하지만이 req.host 관계없이 모든 것을 전달하는 것 같다. 누구나 아이디어가 있습니까? 들어오는 URL (my.domain.com)을 전달 (또는 프록시)하고 포트 9000 (apache2가 실행되는 곳)에 전체를 전달해야하므로 아파치의 가상 호스트가 나머지를 처리 할 수 있습니다. 최고 마틴
업데이트 : 좋아요, 결국에는 모든 것이 잘됩니다. 그것은 아파치 문제 (잘못된 폴더 대상 .... 얼마나 어리석은.) 사실이었다 내 현재 꽤 좋은 작업 솔루션을 게시 아래는 매우 간단합니다 :
아파치의 이름 가상 호스트가 호스트 필드에서 보이는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...');