簡體   English   中英

如何使用PROXY協議獲取客戶端的真實IP地址?

[英]How do I use the PROXY protocol to get the client's real IP address?

AWS剛剛為ELX添加了對PROXY協議的 支持 ,該協議包裝TCP流並添加客戶端IP地址(由代理看到),以便后端服務器可以訪問客戶端的IP(因為否則只能看到ELB的IP) 。

我知道ELB可以在HTTP(S)模式下運行,其中ELB插入X-Forwarded-For標頭,但我在TCP模式下運行我的ELB,以便我可以通過SPDY服務我的站點。

如何修改我的node.js應用程序(使用Express)以使用PROXY協議?

我創建了一個模塊caled proxywrap ,它包裝了node.js Server並自動從連接的流中剝離PROXY協議頭,並將socket.remoteAddresssocket.remotePort重置為PROXY頭中的值。

它與內置的Server模塊(如httphttpsnet )一起使用,作為模塊的替代品:

var http = require('http')
    , proxiedHttp = require('proxywrap').proxy(http)
    , express = require('express')
    , app = express()
    , srv = proxiedHttp.createServer(app); // instead of http.createServer(app)

app.get('/', function(req, res) {
    res.send('IP = ' + req.connection.remoteAddress + ':' + req.connection.remotePort);
});

srv.listen(80);

它也適用於spdy模塊

var proxiedSpdy = require('proxywrap').proxy(require('spdy').server);

當然,您必須在ELB上啟用PROXY協議 (或者您的應用程序背后的任何代理)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM