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대가 장애가 나도 서비스는 중단 없이 계속된다.
'Programming > 기본 (Baisc)' 카테고리의 다른 글
| MariaDB Galera Cluster + MaxScale을 활용한 고가용성 데이터베이스 구축 (0) | 2026.03.24 |
|---|---|
| Java Spring Boot DNS 서버에서 RFC 2136 Dynamic DNS UPDATE 프로토콜 완전 구현기 (0) | 2026.02.13 |
| C사 다계정 지문 브라우저 프로그램 판매 · 임대 안내 (0) | 2025.12.30 |
| RSS 피드 수집기: 뉴스와 정보를 한 곳에서 관리하는 스마트한 방법 for PHP (1) | 2025.09.11 |
| WordPress REST API 오류 rest_not_logged_in 해결 방법 (Apache + PHP-FPM 환경) (0) | 2025.06.27 |




