2013-07-31 3 views
7

AWS just added support to ELBPROXY protocol으로 TCP 스트림을 랩핑하고 백엔드 서버가 클라이언트 IP에 액세스 할 수 있도록 클라이언트 IP 주소를 추가합니다 (그렇지 않으면 ELB의 IP를 볼 수 있기 때문에).PROXY 프로토콜을 사용하여 클라이언트의 실제 IP 주소를 얻는 방법은 무엇입니까?

ELB가 X-Forwarded-For 헤더를 삽입하는 HTTP (S) 모드에서 실행할 수 있지만 ELB를 TCP 모드로 실행하여 SPDY 이상의 사이트를 서비스 할 수 있다는 것을 알고 있습니다.

Express를 사용하여 node.js 응용 프로그램을 PROXY 프로토콜을 사용하여 어떻게 수정할 수 있습니까? 래핑

답변

12

I made a module caled proxywrapServer들 Node.js를 자동으로 연결 '스트림에서 PROXY 프로토콜 헤더를 스트립, PROXY 헤더에서 발견 된 값과 socket.remoteAddresssocket.remotePort 재설정.

이 작동 내장 Server 모듈 (같은 http, httpsnet) 모듈의 드롭의 대체 :

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 (또는 앱이 어떤 프록시를 사용하는지)해야합니다.

+0

ELB 뒤에 socket.io와 함께 작동합니까? – ngzhongcai

+1

예. 이것은 낮은 수준에서 작동합니다. 그것은 PROXY 헤더 다음에 어떤 일이 일어나 든 상관하지 않습니다. – josh3736

관련 문제