HAProxy ¼³Á¤ Çϱâ

ÁÒ¯   
   Á¶È¸ 35193   Ãßõ 2    

HAProxy 설정을 공유 합니다. (사실은 설정 저장용도로 쓰는 글입니다..)

개인적으로 LXD 를 쓸때나, 집에 네트워크를 구성할때 HAProxy 를 종종 씁니다. 가장 간단하면서 강력한 프록시형식의 로드밸런서이자 L7 라우터 이기 때문입니다. 기실 엣지 라우터에서도 이놈을 설치를 할수 있는데, 그렇게 쓰면 NAT 환경에서 뒷단을 쉽게 한개의 IP로 각각의 서버를 서비스 할수 있게 됩니다.

예를 들어서 어떤 IP 1.2.3.4 라는게 있다고 생각 해 봅시다. 여기에 foo.com 이라는 도메인을 연결 합니다. 근데 lxd 나 docker 또는 NAT 환경에서 각 프라이빗 IP(예제로 10.0.0.1/24를 가정 해봅시다.) 를 연결 할때에 10.0.0.2 는 asdf.foo.com 이라는 서브 도메인으로 10.0.0.3 에는 defg.foo.com 이라는 걸로 연결 한다고 가정 해봅시다. 이게 꽤 쉽게 됩니다. (물론 nginx 나 다른 것들도 다 가능은 합니다. 당연하죠. 근데 haproxy 가 그런 서버들과 달리 로우 소켓이나 SNI 헤더라던가... 여튼 더 폭넓은 설정이 가능합니다.

우분투 14.04 기준으로 1.5 버전 이상을 가지고 설명 합니다. 설정 변경후 service haproxy restart 를 해줘야 합니다.

설치(루트권한)
apt-add-repository -y ppa:vbernat/haproxy-1.5 && apt-get update && apt-get install -fy haproxy

아래는 /etc/haproxy/haproxy.cfg 의 예제 일부 입니다...

#default 와 global 부분은 생략.

# 아래는 유저 인증이 없는 페이지를 유저 인증을 걸어 줌
userlist group1
        user user_id insecure-password plain_text_password_here


frontend http
        bind :80
        option http-server-close
        option forwardfor

        # 아래는 조건을 걸어 줍니다.
        # hdr_beg(host)는 헤더의 Host 필드(Virtual Host)가 특정 단어로 시작 되는 경우 -> true로 매칭이 됩니다.
        acl acs_asdf    hdr_beg(Host)  -i asdf. hdr_beg(Host) -i pref.
        acl acs_def     hdr_beg(Host)  -i def.
        # hdr(Host) 는 전역 일치
        acl acs_web     hdr(Host) -i www.foo.com -i foo.com

        # 아래는 인증이 없는 페이지를 인증을 걸어 줍니다.
        acl auth_ok     http_auth(group1)
        # 아래는 acs_prefix1 에 대해서 인증을 강제로 걸어줌.
        http-request    auth realm BasicAuth if acs_asdf !auth_ok

        # 만일에 조건이 매칭되면 특정 백엔드를 사용 함
        # 인증이 성공 하고 acs_prefix1 이 맞다면...
        use_backend asdf        if acs_asdf auth_ok
# 이 경우는 인증이랑 무관하게 접속
        use_backend def         if acs_def
        use_backend web         if acs_web

# 위 조건중 하나도 안걸리면 디폴트로 갑니다.
        default_backend default

# HTTPS 도 동일 합니다.
frontend https
# PEM 파일을 /etc/haproxy/default.pem 경로에 생성해서 넣어 줍니다. 뭐 이건 아실거라 믿고 설명 생략 합니다.
        bind :443 ssl crt /etc/haproxy/default.pem ciphers AESGCM+AES128:AES128:AESGCM+AES256:AES256:RSA+RC4+SHA:!RSA+AES:!CAMELLIA:!aECDH:!3DES:!DSS:!PSK:!SRP:!aNULL no-sslv3
        option http-server-close
        option forwardfor
        rspirep ^Location:\ http://(.*)$    Location:\ https://\1
        rspadd Strict-Transport-Security:\ max-age=31536000;\ includeSubDomains

        acl acs_asdf    hdr_beg(Host)  -i asdf. hdr_beg(Host) -i pref.
        acl acs_def     hdr_beg(Host)  -i def.
        acl acs_web     hdr(Host) -i www.foo.com -i foo.com

        acl auth_ok     http_auth(group1)
        http-request    auth realm BasicAuth if acs_asdf !auth_ok

        use_backend asdf        if acs_asdf auth_ok
        use_backend def         if acs_def
        use_backend web         if acs_web


        default_backend default

# 기본
backend default
        server default 10.1.1.225:1000 check

backend asdf
        server asdf1 10.1.1.2:80 check

backend def
        server def1 10.1.1.3:80 check

backend web
        server web 10.1.1.1:1234 check


# 아래는 HTTPS를 지원하는 백엔드. 사실 이게 HTTP 프론트 엔드에 연결해도 됨...
backend backendhttps
        server httpbackend1 10.11.0.30:443 ssl check verify none




±èÇö¸° 2015-09
¿ª¹æÇâ ÇÁ·Ï½Ã¸¦ ¾Ë¾Æº¸°í Àִµ¥..

À̳𵵠¾µ¼ö ÀÖ´Ù°í ÇÏ´õ±º¿ä..

½Ã°£³¯¶§ µû¶óÇغÁ¾ß°Ú½À´Ï´Ù.

°¨»çÇÕ´Ï´Ù!
     
ȸ¿øK 2015-11
reverse °¡´ÉÇϸé Á¤¸® ºÎŹµå¸³´Ï´Ù.
reverse°¡ µÇ¸é 1°³ÀÇ °¡»ó¼­¹ö ip·Î ¼ö¸¹Àº vmÀ» µ¹¸± ¼ö ÀÖÀ»°Å °°½À´Ï´Ù.
Ȥ½Ã HAProxy·Î UDP Æ®·¡ÇÈÀ̳ª non IP ÆÐŶµµ ºÐ»ê ó¸® °¡´ÉÇÑÁö¿ä ?


Á¦¸ñPage 7/28
2015-06   26476   stone92±è°æ¹Î
2015-06   15892   ȲÁø¿ì
2015-07   18396   nightly
2015-07   15243   ºÐ³ëÀÇ´Ù¿îÈú
2015-07   13714   ÁÖ¿µÁø¿µ¾Æºü
2015-07   13514   ȸ¿øK
2015-08   12489   QS¿ÕÅëÅ°¼Õ¡¦
2015-08   13830   QS¿ÕÅëÅ°¼Õ¡¦
2015-08   13198   QS¿ÕÅëÅ°¼Õ¡¦
2015-08   36847   witbox
2015-08   23157   ±èÀºÈ£
2015-08   53679   ÁÒ¯
2015-08   32099   witbox
2015-09   29074   ÀÓÁø¿í
2015-09   26861   ÁÒ¯
2015-09   35194   ÁÒ¯
2015-10   24520   ±èȲÁß
2016-01   18244   user
2016-01   18516   º¸½½ºñ³»¸®¡¦
2016-01   13431   ¸¸¼®±º