NGINX를 활용한 로드밸런싱 및 HTTPS 설정

이경헌·2024년 7월 31일

이번 글에서는 NGINX를 이용해 두 개의 프론트 서버로 로드밸런싱을 구성하고, HTTPS 인증서(Let's Encrypt)를 통해 SSL을 적용한 설정 파일을 소개합니다. 실 운영 환경에서 사용 가능한 구조이며, 5ritang.store 도메인을 기준으로 작성되었습니다.


전체 구조 개요

  • 포트 80 (HTTP) : 요청 시 HTTPS로 리디렉션
  • 포트 443 (HTTPS) : 로드밸런서를 통해 8081, 8082 포트의 프론트 서버로 프록시
  • SSL 인증서 : Let’s Encrypt를 사용한 무료 SSL 적용
  • 로드밸런싱 : upstream 설정으로 2개 서버 간 부하 분산

NGINX 설정 파일 (/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커넥션을 일정 시간 유지하여 속도 향상

0개의 댓글