2015-09-26 27 views
1

我有一個單一的節點文件,該文件將執行以下操作:爲什麼X-Forwarded-For頭沒有被node-express proxy設置?

它偵聽兩個端口:80和443(對於HTTPS)。 它將80上的連接重定向到443.

而在443上是一個反向代理,通過純http進行循環重定向到多個本地服務器。

我的問題是,在實際的目標服務器上,我無法獲得瀏覽器的實際遠程IP地址。 我得到反向代理的地址。 該請求是由反向代理完成的,因此我猜測這是預期的。

所以,我做的反向代理以下(僅顯示相關的代碼行):

proxy = httpProxy.createServer(); 

    var https_app = express(); 
    https.createServer(sslCerts, https_app).listen(443, function() { 
    ... 
    }); 


    https_app.all("/",function(req, res) { 
     ... 
     //res.append('X-Forwarded-For',req.connection.remoteAddress); 
     proxy.web(req,res, {target: local_server}); 
     ... 
    } 

我需要做的是這樣res.append(「X - 轉發,對於」,req.connection .remoteAddress)到代理服務器..在其請求標頭中。設置地址的問題是次要的。我首先需要設置可以被目標服務器讀取的頭本身。代理本身不設置這個頭,我認爲它應該默認。還是應該?或者做它,我做錯了閱讀它?

回答

1

我看不到您的proxy的定義,但我假設它與以下代碼相同,使用express-http-proxy。我希望這種替代方法會爲你工作:

var proxy = require('express-http-proxy'); 

var myProxy= proxy('localhost:443', { 
    forwardPath: function (req, res) { 
     return require('url').parse(req.url).path; 
    } 
}); 

,然後簡單地:

app.use("/*", myProxy); 

我希望這有助於。

+0

感謝您的回答。我使用https://github.com/nodejitsu/node-http-proxy中的代理服務器,我認爲我從該網站的文檔中獲得了答案,標題爲「使用代理請求頭重寫來設置獨立代理服務器」我很早就錯過了。我會稍後再嘗試,並希望它能起作用。 – Sam

+0

完全忘了這篇文章。我解決了這個問題,這是由於我在代理服務器代碼中做了些傻事。 upvoted你的答案,是的,我認爲你的解決方案會起作用,如果我一直在使用express-http-proxy,所以我接受了答案。 – Sam