HAProxy 아키텍처

HAProxy 3.2는 모든 외부 트래픽의 단일 진입점으로, 프로토콜별로 적절한 백엔드로 라우팅한다. 3대 구성으로 단일 장애점 없이 운영된다.

서버 구성

노드 IP 버전 동시 서비스
PRX-1 172.20.17.7 3.2.14 HAProxy + MaxScale
PRX-2 172.20.18.7 3.2.14 HAProxy + MaxScale
PRX-3 172.20.19.7 3.2.14 HAProxy + MaxScale

트래픽 라우팅 구조

Client (인터넷)
HAProxy 3.2 (.7 x 3대)
SSL 종료 · HTTP/2 · HTTP/3(QUIC) · L4/L7 라우팅
 
:443 HTTPS :80 HTTP :23306 DB :53 DNS
ACL 기반 Host 라우팅
bk_php
NGINX Unit
.4:80 x 3대
PHP 사이트
bk_was
WAS
.2:8080 x 3대
Java API
bk_mariadb
Galera
.10:13306
DB Proxy
bk_dns
DNS Server
.2:53
DNS

Frontend / Backend 매핑

Frontend 포트 Backend 대상 서버
ft_web 80, 443 (SSL/QUIC) bk_php bk_was bk_coupang .4:80 / .2:8080 / .2:8092
ft_mariadb 13306 bk_mariadb .10:13306 (PP V2)
ft_websocket 8000 bk_websocket .2:61000
ft_dns_tcp 53 TCP bk_dns_tcp .2:53
ft_dot 853 TLS bk_dot DNS over TLS
ft_ftp_a1~a3 10021~10023 bk_ftp .4:10021 (PASV 58000~58149)

웹 트래픽 전체 흐름

Client HAProxy (.7)
SSL 종료 + ACL
NGINX Unit (.4)
Host 기반 앱 라우팅
WAS (.2)
Java Spring Boot
핵심: 모든 웹 트래픽은 반드시 HAProxy(.7) → NGINX Unit(.4) 순서로 경유한다. .4를 건너뛰고 .2에 직접 접근하는 것은 불가하다.


NGINX Unit 아키텍처

NGINX Unit은 동적 애플리케이션 서버로, Host 헤더 기반으로 수십 개의 PHP 사이트를 하나의 서버에서 운영한다. 설정 변경 시 재시작 없이 API로 즉시 반영된다.

서버 구성

노드 IP Control API 리스닝
UNIT-1 172.20.17.4 :9080 :80
UNIT-2 172.20.18.4 :9080 :80
UNIT-3 172.20.19.4 :9080 :80
77
Routes
51
PHP Applications
47
PHP Routes
9
Proxy Routes

Host 기반 라우팅 구조

HAProxy → NGINX Unit (:80)
Host 헤더로 라우팅 결정
routes[] 배열 순회 → match.host 매칭
Platform Route
236개 도메인
share: dr-platform$uri
fallback: dr-platform-drive
운전연수, 보험, 랜딩 등
개별 PHP Routes
46개 라우트
share: 각 사이트$uri
fallback: 각 PHP 앱
그누보드, 워드프레스 등
Proxy Routes
9개 라우트
proxy: WAS (.2)
Java 관리자, 웹메일,
DNS Admin, 모니터링 등
PHP 7.4 처리
정적 파일 → share
PHP → fallback 앱
PHP 7.4 처리
사이트별 독립 앱
Reverse Proxy
WAS .2:8080~8092

주요 라우팅 예시

도메인 (Host) 타입 Application 경로
platform.drsoft.co.kr 외 236개 PHP dr-platform-drive dr-sol/dr-platform
bonniecancer.co.kr 등 PHP bonnie-cancer dr-siwoo-gnu/bonnie-cancer
coupang.drsoft.co.kr Proxy → WAS :8092 srv-webapp (Java)
mail.a-d.kr Proxy → WAS :8089 mail-web (Java)

설정 변경 (REST API)

# 현재 routes 조회
curl -s http://172.20.17.4:9080/config/routes

# 전체 routes 교체 (안전한 방법)
curl -s -X PUT http://172.20.17.4:9080/config/routes -d @routes.json

# 애플리케이션 목록 조회
curl -s http://172.20.17.4:9080/config/applications
주의: PUT /config/routes/{index} 는 해당 인덱스의 route를 교체(REPLACE)한다. INSERT가 아니다! 반드시 전체 routes 배열을 GET → 수정 → PUT 방식으로 변경해야 한다.

전체 인프라 역할 요약

서버 역할 IP (.x) 소프트웨어 역할
.7 (PRX) 17.7 / 18.7 / 19.7 HAProxy 3.2 + MaxScale 2.5 L4/L7 프록시, SSL 종료, DB 프록시
.4 (UNIT) 17.4 / 18.4 / 19.4 NGINX Unit PHP 앱 서버, 리버스 프록시
.2 (WAS) 17.2 / 18.2 / 19.2 Java 17 + Spring Boot 3.2 Java 애플리케이션 서버
.10 (DB) 17.10 / 18.10 / 19.10 MariaDB 11.8 Galera Cluster 동기 복제 데이터베이스

모든 계층이 3대씩 구성되어 있어, 어느 서버 1대가 장애가 나도 서비스는 중단 없이 계속된다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기