로드발란서 (LB) 에 대한 정리

리눅스/OpenStack|2018. 1. 25. 17:18
반응형

프로토콜 방식

 

1) TCP, HTTPS

- 클라이언트 IP 가 남지 않고, LB 서버의 사설IP 가 남게 됨

- round-robin 의 경우 IP 변경이 잘 안됨

- 헬스 체크 방식 : 포트 / 웹서버에 헬스체크 로그 남지 않음

 

2) HTTP

- 클라이언트 IP 가 서버 로그에 남게 됨 (아래 설정 필요)

- round-robin 의 경우 IP 변경이 잘 됨

- 헬스 체크 방식 : 모니터링 페이지 / 웹서버에 헬스체크 로그 남음

 

* HTTP 로 하였다 하더라도 아파치 웹서버에서 'X-Forwarded-For' 설정을 통해야 클라이언트 IP 로 남길 수 있습니다.

 

# vi /usr/local/apache/conf/httpd.conf

LoadModule remoteip_module modules/mod_remoteip.so

LogFormat "%h %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" X-Forwarded-For

CustomLog /usr/local/apache/logs/sysdocu.tistory.com-xforwarded.log X-Forwarded-For

* %h 가 리모트 IP 입니다.

 

* SSL 을 사용하려면 TCP 를 이용해야 합니다.

(로드발란서에서 443 인증서를 설치하고, 웹서버의 80번 포트로 연결시키면 됩니다)

 

* 웹서버 로그에는 IP 가 잘 찍히는 데 소스상에서 출력되지 않는다면 두가지 방법중 하나를 사용하면 됩니다.

 

1) 웹서버에서 설정할 경우

httpd.conf 에 아래 옵션 추가

RemoteIPHeader X-Forwarded-For

 

2) 웹소스에서 설정할 경우

function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
        $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

echo get_client_ip(); 

 

반응형

댓글()