이전 포스트에서는 Terraform을 이용하여 AWS EC2 인스턴스를 프로비저닝하고 기본적인 인프라를 구축했습니다. 이번에는 그 다음 단계로 Nginx Proxy Manager와 HAProxy를 이용한 웹 서버 설정 방법에 대해 살펴보겠습니다.
Terraform으로 EC2 인스턴스를 생성한 후, AWS 콘솔이나 CLI를 통해 할당된 공인 IP를 확인합니다. 이전 포스트에서 생성한 Elastic IP(EIP)를 확인하면 됩니다.
가비아와 같은 도메인 등록 서비스를 통해 도메인을 구매한 후, DNS 설정을 통해 공인 IP와 연결해야 합니다.
가비아에서 DNS 레코드를 다음과 같이 설정했습니다:

주요 설정 포인트:
EC2 인스턴스에 접속한 후, 브라우저를 통해 공인IP:81/nginx/proxy로 Nginx Proxy Manager의 관리자 페이지에 접속합니다.
참고: 초기 로그인 정보는 일반적으로 이메일:
admin@example.com/ 비밀번호:changeme입니다. 최초 로그인 시 비밀번호를 변경해야 합니다.
로그인 후 새로운 호스트를 생성합니다:

설정 항목:
보안 연결을 위해 SSL 인증서를 설정하는 것이 중요합니다. Nginx Proxy Manager는 Let's Encrypt를 통한 무료 SSL 인증서 발급을 지원합니다.
SSL 설정 화면:

SSL 설정 옵션:
Terraform 코드에서 이미 HAProxy 설정을 포함했지만, 여기서 좀 더 자세히 살펴보겠습니다.
global
lua-load /usr/local/etc/haproxy/lua/retry_on_502_504.lua
resolvers docker
nameserver dns1 127.0.0.11:53
resolve_retries 3
timeout retry 1s
hold valid 10s
defaults
mode http
timeout connect 5s
timeout client 60s
timeout server 60s
frontend http_front
bind *:80
acl host_app1 hdr_beg(host) -i api.cotree.site
use_backend http_back_1 if host_app1
backend http_back_1
balance roundrobin
option httpchk GET /actuator/health
default-server inter 2s rise 1 fall 1 init-addr last,libc,none resolvers docker
option redispatch
http-response lua.retry_on_502_504
server app_server_1_1 app1_1:8080 check
server app_server_1_2 app1_2:8080 check
주요 설정 포인트:
balance roundrobin: 라운드 로빈 방식의 로드 밸런싱option httpchk: 헬스 체크 설정 (/actuator/health 엔드포인트 사용)default-server: 서버 상태 체크 주기 및 방식 설정option redispatch: 서버 연결 실패 시 다른 서버로 재시도이런 구성을 통해 얻을 수 있는 이점은 다음과 같습니다:
웹서버 구성 후 다음과 같은 작업을 추가로 고려해볼 수 있습니다:
Nginx Proxy Manager와 HAProxy를 조합하여 안정적이고 확장 가능한 웹 서비스 인프라를 구축했습니다. Terraform을 통한 인프라 코드화(IaC)와 함께 이러한 구성은 일관된 환경 설정과 관리를 가능하게 합니다.
Docker 컨테이너를 활용하여 각 서비스를 격리하고, 네트워크로 연결함으로써 유연하게 서비스를 확장하거나 교체할 수 있는 구조를 갖추었습니다.