AWS just added support to ELB用于PROXY protocol,它包装TCP流并添加客户端IP地址(由代理看到),以便后端服务器可以访问客户端的IP(因为它只会参见ELB的IP)。
我知道ELB可以在HTTP(S)模式下运行,其中ELB插入X-Forwarded-For
标头,但我在TCP模式下运行我的ELB,以便我可以通过SPDY为我的网站提供服务。
如何修改我的node.js应用程序(使用Express)以使用PROXY协议?
答案 0 :(得分:14)
I made a module caled proxywrap包装node.js Server
并自动从连接流中删除PROXY协议标头,并将socket.remoteAddress
和socket.remotePort
重置为在PROXY标题。
它适用于内置的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);
它也适用于spdy module:
var proxiedSpdy = require('proxywrap').proxy(require('spdy').server);
当然,您必须enable the PROXY protocol on your ELB(或您的应用背后的任何代理)。