10

AWSは、PROXY プロトコルのサポートを ELB に追加しました。これは、TCP ストリームをラップし、クライアント IP アドレス (プロキシから見たもの) を追加して、バックエンド サーバーがクライアントの IP にアクセスできるようにします (それ以外の場合は ELB の IP を参照するだけなので)。 .

ELB がヘッダーを挿入する HTTP(S) モードで ELB を実行できることはわかっていますが、SPDYX-Forwarded-Forでサイトを提供できるように、ELB を TCP モードで実行しています。

PROXY プロトコルを使用するように node.js アプリを (Express を使用して) 変更するにはどうすればよいですか?

4

1 に答える 1

16

node.js をラップServerし、接続のストリームから PROXY プロトコル ヘッダーを自動的に削除し、PROXY ヘッダーにある値にリセットするsocket.remoteAddressproxywrapsocket.remotePortというモジュールを作成しました。

モジュールのドロップイン置換として、組み込みServerモジュール ( httphttps、および など) で動作します。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 プロトコルを有効にする必要があります。

于 2013-07-31T22:16:44.617 に答える