Open hyunsoo-rtdata opened 2 years ago
https://findstar.pe.kr/2018/07/27/install-haproxy/
전역 tune.ssl.default-dh-param 2048
ciphers 설정 (WindowsXP SP3 IE7,8 호환이 필요하지 않을 경우 !3DES도 추가한다.) ssl-default-bind-ciphers ECDH+AESGCM:ECDH+AES128:ECDH+AES256:DH+AES128:DH+AES256:DH+CAMELLIA128:DH+CAMELLIA256:DH+SEEDCBC:RSA:!aNULL:!MD5:!eNULL:!RC4
defalut log global mode http option httplog clf
Enable logging of null connection (헬스체크와 같이 시스템이 살아 있는지 확인하기 위해서 일정하게 접속하는 커넥션에 대한 로그 사용) option dontlongnull
Enable skip logging normal connection log 일반적인 http status 200 로그는 남기지 않는다. option dontlog-normal
request-요청을 서버로 보낼 때 X-Forwarded-For
를 헤더에 추가한다
option forwardfor
기본적으로 HAProxy는 커넥션 유지 관점에서 keep-alive 모드로 동작, 각각의 커넥션은 request-요청과 reponse-응답을 처리하고나서 새로운 request을 받기까지 connection idele 상태(유휴상태)로 양쪽이 연결되어 있다. 이 동작 모드 변경하려면 4가지의 옵션이 있다. option http-server-close
timeout http-request 10s timeout client 20s timeout connect 4s timeout server 30s timeout http-keep-alive 10s
haproxy의 상태정보를 확인할 수 있는 기능을 활성화 한다. 접근 가능한 사용자를 제한하기 위해서 auth를 추가기능 bind :9000 # Listen on localhost:9000 stats enable # Enable stats page stats realm Haproxy\ Statistics # Title text for popup window stats uri /haproxy_stats # Stats URI stats auth admin1:password1 stats auth admin2:password2
모니터링을 위한 주소 설정 monitor-uri /monitor
모니터링 주소는 같은 private ip 대역이 아니라면 실패 처리 monitor fail if !private-network
로드 밸런싱을 라운드 로빈으로 지정한다. 이밖에도 leastconn을 많이 지정한다. balance roundrobin
연결할 서버들이 active health check를 지정한다. option httpchk HEAD /_health HTTP/1.1\r\nHost:\ localhost
에러 파일 설정 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http
backend 서버들로 request-요청을 proxy로 전달할 때 protocol(https)와 Port 정보를 함께 전달, X-Forwarded-For는 앞의 option으로 전달됨 (option forwardfor) http-request set-header X-Forwarded-Port %[dst_port] http-request add-header X-Forwarded-Proto https if { ssl_fc }
option dontlongnull : 로그 비대화 방지, Probe같은 잡다한 기록을 HAPoxy Log 화하지 않는 옵션
option httplog : 기본 Log는 SIP, DIP와 Name만 표기하므로, 이 옵션을 사용하여 디테일을 높임
option http-server-close : 클라이언트와 리얼서버 연결 종료시, 디폴트로 유휴대기하지 않고, 서버에서 Handshake 를 종료하여, 더 빠른 새로운 세션을 준비할 수 있도록함, 디폴트 옵션에 선언되어 있어도, 인스턴스 별로 no 옵션으로 제외 처리 가능
option redispatch : mode HTTP에서 Cookie에 지정된 Real 서버가 다운되면, 외부 클라이언트가 쿠키를 플러시하기 전에는 서비스에 문제를 일으킬 수 있으므로, 이 옵션을 줘서, proxy의 지속성을 무시하고 쿠키, 세션 재분배를 실행하게 된다. retries 값이 0 보다 커야 한다.
option contstats : 지속적인 트래픽 통계 업데이트 사용
retires 3 : 장애 발생 시 최대 3회 연결 시도
timeout connect 5s : TCP 패킷손실을 막기 위한 Real 서버로의 연결 최대 지연시간 설정 ( Backend에 적용되지만, 전역 설정에서도 가능)
timeout http-request 10s : Request 시의 헤더에만 적용. DoS 방어를 위해, HTTP 요청 타임아웃시간 설정 : 클라이언트의 연결 타임아웃과는 무관한, 서버(HAProxy)의 옵션이다.
timeout http-keep-alive 1s : 클라이언트의 요청에 따른 응답 전송 후, 다음 요청까지 대기 시간. http-request가 선행함.
timeout queue 30s : 서버의 maxconn에 도달시, 무한정 보류상태로 두지 않고 HTTP 503 응답을 보내면서 연결을 버리기까지의 시간
timeout server 1m : 서버가 데이터를 승인하거나, 전송해야 할 때의 연결 최대 시간.
timeout check 10s : timeout server 와 동일하거나 작은 값을 가져야 한다.
backlog 10000 : 백로그 대기열 크기
-클라이언트의 연결을 받는 부분 처리, WAF 웹방화벽 기능에 가깝다. -백엔드를 대리하는 메인 프런트엔드
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static : acl에서 정의한 style 들을 backend static 으로 보낸다.
default_backend web : 위의 조건 이외는 backend web 으로 보낸다.
https://majjangjjang.tistory.com/117
1. HAProxy 옵션
global
Defaults
listen
2. LoadBalance 옵션