node.js をラップServer
し、接続のストリームから PROXY プロトコル ヘッダーを自動的に削除し、PROXY ヘッダーにある値にリセットするsocket.remoteAddress
proxywrapsocket.remotePort
というモジュールを作成しました。
モジュールのドロップイン置換として、組み込み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 モジュールでも動作します:
var proxiedSpdy = require('proxywrap').proxy(require('spdy').server);
もちろん、 ELB (またはアプリの背後にあるプロキシ)で PROXY プロトコルを有効にする必要があります。