반응형

ELB를 Http형태로 세팅을 한 후라면, X-FORWARDED-FOR 헤더에서 찾으면 client ip를 쉽게 얻을 수 있는데,

웹소켓이라던지 기타 TCP 통신을 하는 TCP 형태로 세팅이 된 경우라면, ELB쪽에도 Proxy 세팅을 해야하고,

서버쪽에서도 추가로 Proxy Address를 받을 수 있도록 세팅을 해야 client ip를 얻어올 수가 있었다.


일단 해야 할 작업은 두 가지이므로 정리해본다.


1. ELB에 proxy protocol 활성화 하기

아마존 콘솔을 열고 아래의 명령어를 입력하면 완료된다.

aws elb create-load-balancer-policy --load-balancer-name my-load-balancer --policy-name EnableProxyProtocol --policy-type-name ProxyProtocolPolicyType --policy-attributes "AttributeName=ProxyProtocol,AttributeValue=true"


2. 서버 (이 포스팅에서는 Nginx를 사용하여 웹소켓을 사용함) 세팅

[nginx.conf]

server {
  listen  80  proxy_protocol; # 필수
  real_ip_header  proxy_protocol; # 필수

  location / {
    proxy_http_version  1.1; # 필요에 따라
    proxy_pass   http://127.0.0.1:8000/; # 필요에 따라
    proxy_set_header  Connection  $connection_upgrade; # 웹소켓을 사용한다면 필수
    proxy_set_header  Upgrade  $http_upgrade; # 웹소켓을 사용한다면 필수
    proxy_set_header  X-Forwarded-For  $proxy_protocol_addr;  # 필수
  }
}



기본 Nginx access log 설정이라면, 아마 기존과 동일한 ip가 확인이 될 건데, log_format을 살짝 변환하여 이를 해결할 수 있다.

[nginx.conf]

log_format forward_log '$proxy_protocol_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer" ' '"$http_user_agent"' ;


access_log access.log forward_log # 기존 access_log 설정에 파라미터로 log_format 정의한걸 입력해주면 access_log에서도 확인을 해볼 수가 있다.


만약, nginx를 사용하지 않는경우라도, X-Forwarded-For 헤더에서 찾으면 원하는 client ip 정보를 얻을 수가 있다.

반응형

'개발 > AWS' 카테고리의 다른 글

[AWS] EC2 CentOS Root Volume 확장  (0) 2019.04.12
[EC2] 유저 생성하기  (0) 2016.06.17
[AWS-EC2] windows에서 putty로 ssh접근하기  (0) 2016.06.11
,