繁体   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