이두잉의 AWS 세상

AWS ELB Proxy Protocol 기능 활성화 하기(TCP)

2015.11.23 15:06 - leedoing leedoing

안녕하세요. 이두잉입니다.

금일은 TCP 통신을 위해서 ELB에 Proxy Protocol 정책을 추가해보도록 하겠습니다.


1. Overview

기본적으로 ELB는 http 및 https 통신에 한해서 Sticky Session 지원과 Client IP를 포워딩해줍니다.

L4(TCP/IP) 레벨은 지원되지 않습니다.


아래는 ELB를 통해 들어온 http 통신 header 값입니다. 

기존 http 헤더에서 x-forwarded-for/port/protocol 의 항목이 추가 됐습니다.


ELB에서 TCP를 사용하면 기본적으로 x-forwarded 항목을 지원하지 않습니다.

그러나 ELB의 Proxy Protocol 정책을 추가하면 해결할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
  host: 'test-2139921278.ap-northeast-1.elb.amazonaws.com:8080',
  accept: '*/*',
  'accept-encoding''gzip, deflate, sdch',
  'accept-language''ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4',
  'user-agent''Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/45.0.2454.101 Safari/537.36',
  'x-forwarded-for''2XX.XXX.XX.XXX',
  'x-forwarded-port''8080',
  'x-forwarded-proto''http',
  connection: 'keep-alive' 
}

 

2. Getting Started

위 document를 통해 ELB를 Proxy 모듈로 실행합니다.

그리고 node proxy 모듈을 통해서 Cleint IP를 확인합니다.

1
2
3
4
5
6
7
8
9
10
11
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);
    console.log('IP = ' + req.connection.remoteAddress + ':' + req.connection.remotePort);
});
srv.listen(80);


3. Result

ELB를 Proxy 모드를 설정하여 Client IP 및 Port를 확인할 수 있습니다.


추가로 ELB는 Roud Robin보단 Least connection에 가까운 동작을 합니다.



감사합니다.

'Compute > ELB' 카테고리의 다른 글

AWS ELB 사용 시 Apache 408/503 error log  (0) 2016.12.12
AWS ELB Pre-warm 신청 양식  (0) 2016.01.25
AWS ELB Best Practices  (0) 2016.01.18
AWS ELB Proxy Protocol 기능 활성화 하기(TCP)  (0) 2015.11.23