AWS刚刚为ELX添加了对PROXY协议的支持,该协议包装TCP流并添加客户端IP地址(由代理看到),以便后端服务器可以访问客户端的IP(因为否则只能看到ELB的IP) .
我知道ELB可以在HTTP(S)模式下运行,其中ELB插入X-Forwarded-For标头,但我在TCP模式下运行我的ELB,以便我可以通过SPDY服务我的站点.
如何修改我的node.js应用程序(使用Express)以使用PROXY协议?
jos*_*736 14
我创建了一个模块caled proxywrap,它包装了node.js Server并自动从连接流中剥离PROXY协议头,并重置socket.remoteAddress和socket.remotePortPROXY头中的值.
它的工作原理与内置Server模块(例如http,https和net)作为一个下拉更换的模块:
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);
Run Code Online (Sandbox Code Playgroud)
它也适用于spdy模块:
var proxiedSpdy = require('proxywrap').proxy(require('spdy').server);
Run Code Online (Sandbox Code Playgroud)
当然,您必须在ELB上启用PROXY协议(或者您的应用程序背后的任何代理).
| 归档时间: |
|
| 查看次数: |
4560 次 |
| 最近记录: |