2012-03-09 82 views
2

我正在嘗試使用nodejs創建一個反向代理,我可以在其中映射不同的 組合指向各種網站。在Nodejs中實現反向代理

的follwing是我第一次嘗試代碼:

var http = require('http'), 
httpProxy = require('http-proxy'); 
httpProxy.createServer(function (req, res, proxy) { 
    proxy.proxyRequest(req, res, { 
    host: 'www.yahoo.com', 
    port: 80 
}); 
}).listen(8000); 

以及工作正常,但如果我有一整套的組合。我不知道如何去做。

我的第二次嘗試

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

var mapping = { 
hostnameOnly: true , 
router : { 
'127.0.0.1:8000' : 'www.google.com' , 
'127.0.0.1:8001' : 'www.yahoo.com' 
    } 
} 

var proxyserver = httpProxy.createServer(mapping).listen (80) ; 

這行得連工作,我不知道爲什麼。

那麼我想創建的是簡單的應用程序,其中我映射到域 並獲取這些頁面。 我仍然得到一個nodejs的掛起,所以如果這個問題聽起來很荒謬,我很抱歉。

+0

不完全是答案,但這裏有一些提示可以幫助您診斷問題。 NodeJS將所有依賴關係存儲在node_modules下。 node_modules下的依賴關係只是js文件。像node-http-proxy這樣的依賴項完全用JavaScript編寫,因此你可以改變它們。只需轉到node_modules下的node-http-proxy並添加一些console.log()即可。它應該有所幫助。 – 2012-03-09 18:20:38

回答

0

您的第二次嘗試失敗,因爲hostnameOnly規範不接受路由路徑中的端口。從node-http-proxy docs

var options = { 
    hostnameOnly: true, 
    router: { 
    'foo.com': '127.0.0.1:8001', 
    'bar.com': '127.0.0.1:8002' 
    } 
} 

你在正確的軌道上,但。見here。如果省略hostnameOnly參數,它應該可以正常工作。