2015-06-20 85 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 –