본문 바로가기
IT Knowledge/HAProxy

HAProxy Config파일 옵션 정리!!

by Seok. 2022. 1. 24.
반응형

 

HAProxy 구성파일의 필수 섹션은 4가지 있습니다.

(작성시 줄과 들여쓰기는 무시됩니다. )

  • Global
  • Defaults
  • Frontend
  • Backend

 


[Global]

구성 파일의 맨위에는 global 섹션을 작성합니다.

HAProxy 영향을 미치는 프로세스 전반의 보안 성능 조정을 정의 합니다.

Global 섹션
global
    maxconn 50000
    log/dev/log local0
    user haproxy
    group haproxy
    stats socket /run/haproxy/admin.sock user haproxy group haproxy mode660 level admin
    nbproc2
    nbthread4
    cpu-mapauto:1/1-40-3
    ssl-default-bind-ciphersECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
    ssl-default-bind-options ssl-min-verTLSv1.2 no-tls-tickets

-. maxconn : HAProxy가 수락할 최대 연결 수를 제한합니다.

-. Log : 시작중에 발생하는 경고 및 런타임중에 발생하는 문제를 기록되도록 함. 

(Syslog, journald, listen, /dev/log, 원격지 등…)

-. User / Group : HAProxy를 실행할 사용자 및 그룹 지정. 지정하지 않으면 ROOT가 실행합니다.

    (반드시 루트 권한이 아닌 일반 사용자 계정으로 실행하도록 습관을 기르는것이 좋습니다.)

-. stats socket : 서버 상태 확인을 동적으로 비활성화 하고, 서버의 로그 밸런싱 가중치를 변경

-. nbproc /nbthead : HAProxy 시작시 각각의 프로세스와 Thread 수를 지정합니다.

-. ssl-default-bind-ciphers : SSL TLS Ciphers 지정

-. ssl-default-bind-options : 이전 프로토콜에 대한 지원을 비활성화 하는 옵션

(ex. TLSv1.2 이상을 사용하는 연결만 수락)

 

[Defaults]

뒤에 오는 Frontend Backend 섹션에 적용할 공통적인 설정을 작성합니다.

(뒤에 Frontend, Backend 섹션에서 설정을 덮어쓸 있습니다.)

Defaults 섹션
defaults
    timeout connect10s
    timeout client30s
    timeout server30s
    log global
    mode http
    option httplog
    maxconn3000

-. Timeout connect / Timeout client / Timeout server :

  • timeout connect - Backend 연결될때까지 대기하는 시간(접미사 s 초단위)
  • timeout client - client 반응이 올것으로 예상하는 시간
  • timeout server - Backend 서버가 반응이 올것으로 예상하는 시간(시간이 지나면 timeout으로 close)

-. Log global : 로그는 글로벌 설정을 따른다.

-. Mode http : http 프로토콜을 사용하는 로그밸런싱 모드

(트래픽을 단순 tcp 수준이 아닌 HTTP 메시지를 사용할 수있는지 정의)

-. Option httplog로그 작성시  다양한 format 으로 작성일반적으로 option httplog  선호합니다.

  로그 수준을 다운그레이드 하고자 하는 경우, 이후 frontend, Backend 섹션에서 다운그레이드 가능합니다.

-. Maxconn최대 연결수 지정(기본 2000)

 

 

[Frontend]

클라이언트가 연결될 있는 IP Address & Port 작성합니다.

다양한 Frontend 섹션을 만들어 추가할 있다.

예제에서는 www.mysite.com 이라는 label 구분한다

Frontend 섹션
frontend www.mysite.com
    bind10.0.0.3:80
    bind10.0.0.3:443 ssl crt /etc/ssl/certs/mysite.pem
    http-request redirect scheme https unless{ ssl_fc }
    use_backend api_servers if{ path_beg /api/ }
    default_backend web_servers

-. Bind : IP Port 종종 ssl crt arguments 작성합니다.

-. Http-request redirect : http https 리다이렉트 한다.

-. Use_backend클라이언트로부터 들어오는 request 뒷단 서버로 전달할 설정

                      If path_beg /api/와 같이, 특정 Path를 구분하여 전달 할 수도 있다.

-. Default_backend : use_backend 규칙에 해당하지 않는 트래픽은 기본적으로 default_backend 전달.

만약, use_backend or default_backend 둘다 사용되지 못했다면, 503 Service Unavailable error가 발생한다.

 

 

 

[Backend]

로드밸런스 단계로, Client 부터 들어온 트래픽을 실제 뒷단 서버로 전달하는 섹션이다.

backend 섹션
backend web_servers
    balance roundrobin
    cookieSERVERUSED insert indirect nocache
    option httpchk HEAD /
    default-server check maxconn20
    server server1 10.0.1.3:80 cookie server1
    server server2 10.0.1.4:80 cookie server2

-. Balance로드 밸런스할 방식을 선택합니다. (roundrobin 방식 / leastconn 방식 등…)

-. Cookie쿠키 기반 지속성을 활성화   사용

-. Option httpchk상태확인을 Layer 4레벨이 아닌 Layer 7 단계로 백엔드 서버 체크를 합니다.

응답하지 않는 서버는 더 이상 요청을 처리하지 않습니다.

-. Default-server상태확인최대 연결 활성화 등과 같이 뒤따르는 모든 행동에 대한 기본값을 구성

-. Server실제 뒷단 서버의 IP Port 작성합니다.

 

 

[Listen]

다음은 통계 페이지를 구성하는 간단한 예입니다.

Listen 섹션
listen stats
    bind*:8404
    stats enable
    stats uri/monitor
    stats refresh5s

 

 

[출처]

https://www.haproxy.com/blog/the-four-essential-sections-of-an-haproxy-configuration/

https://www.haproxy.com/documentation/hapee/latest/load-balancing/health-checking/active-health-checks/

반응형

댓글