이번 글에서는 NGINX를 이용해 두 개의 프론트 서버로 로드밸런싱을 구성하고, HTTPS 인증서(Let's Encrypt)를 통해 SSL을 적용한 설정 파일을 소개합니다. 실 운영 환경에서 사용 가능한 구조이며, 5ritang.store 도메인을 기준으로 작성되었습니다.
upstream 설정으로 2개 서버 간 부하 분산/etc/nginx/nginx.conf)user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
# 로드밸런서 정의 (두 개의 프론트 서버로 분산 처리)
upstream loadbalancer {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
# HTTP 요청 처리 (80번 포트)
server {
listen 80;
server_name www.5ritang.store 5ritang.store;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://loadbalancer;
}
# HTTP → HTTPS 리디렉션 처리
if ($host = www.5ritang.store) {
return 301 https://$host$request_uri;
}
if ($host = 5ritang.store) {
return 301 https://$host$request_uri;
}
}
# HTTPS 요청 처리 (443번 포트)
server {
listen 443 ssl;
server_name www.5ritang.store 5ritang.store;
ssl_certificate /etc/letsencrypt/live/5ritang.store/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/5ritang.store/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://loadbalancer;
}
}
# 기본 설정
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 600;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# SSL 프로토콜 설정
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# 로그 설정
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Gzip 압축 설정
gzip on;
# 가상 호스트 설정 포함
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
| 항목 | 설명 |
|---|---|
upstream | 로드밸런서 정의. 두 개의 서버(8081, 8082)로 분산 요청 처리 |
proxy_set_header | 클라이언트 정보를 프론트 서버에 전달하기 위한 헤더 설정 |
| HTTP 리디렉션 | 포트 80으로 접속 시, HTTPS(443)로 자동 리디렉션 처리 |
| SSL 설정 | Let’s Encrypt를 통한 무료 인증서 기반의 SSL 구성 |
| gzip | 콘텐츠 압축을 통한 트래픽 최적화 |
| keepalive_timeout | 커넥션을 일정 시간 유지하여 속도 향상 |