2015-06-20 88 views
1

我需要根据来自浏览器的某个URL创建代理, 因为我对这个主题相当陌生我不知道如何测试它...... :( 我需要某种方式来测试一下,看看,这是实际工作 我用这个下面的代码从这个博客根据URL路径创建代理

http://blog.nodejitsu.com/node-http-proxy-1dot0/

var httpProxy = require('http-proxy') 

var proxy = httpProxy.createProxy(); 

var options = { 
    'foo.com': 'http://website.com:8001', 
    'bar.com': 'http://website2.com:8002' 
} 

require('http').createServer(function(req, res) { 
    proxy.web(req, res, { 
     target: options[req.headers.host] 
    }); 
}).listen(8000); 

我需要什么,当你把浏览器,本地主机是:8000你将路线(代理)到选项中描述的具有不同路径的新服务器。

+0

那么问题是什么? –

+0

你不能放localhost:8000并重定向,因为'req.headers.host'将是localhost:8000,它不匹配你的'options'上的任何东西。 –

回答

1

如果您希望用户输入foo.com,请转至http://website.com:8001,您需要为foo.com设置一个虚拟主机,例如Nginx。

Nginx将为foo.com和bar.com托管虚拟主机,这将是Node.js应用程序的“代理传递”。

当用户转到foo.com时,它会让您的Nginx服务器将请求传递给您的Node应用程序,该应用程序会将请求代理到您在选项中设置的相对URL。

如果你需要我可以给你需要的Nginx配置。

的Nginx虚拟主机配置:

server { 
    listen 80; 

    server_name foo.com bar.com; 

    location/{ 
     proxy_pass http://127.0.0.1:8000; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 
} 

当然,你需要点foo.com和bar.com DNS到的Nginx /节点服务器。 Node应用程序很好。你不需要更多。启动Nginx和Node,你就完成了。

+0

Michelem感谢您的支持,已投票! ,你能提供完整的代码,我可以测试,(即时通讯非常新的主题......)ngix是节点的一部分,我可以使用一些模块?因为我需要它在RT期间我可以配置这个代码? –

+0

顺便说一句,你不认为HTTP代理应该做的服务器代理?至少从那里处理这个文档,我的问题是,我没有找到好的例子如何使用它... –

+1

Nginx是一个Web服务器在你的域名上接受请求,你也可以在没有Nginx的情况下用Node.js做所有事情,请看下面这个:http://stackoverflow.com/questions/9368794/how-to-use-vhosts-alongside-node-http-proxy –