본문 바로가기
Infra2024년 11월 2일6분 읽기

Nginx vs Caddy vs Traefik — 리버스 프록시 3종 비교

YS
김영삼
조회 423

리버스 프록시 선택 기준

리버스 프록시는 클라이언트와 백엔드 서버 사이에서 요청을 중계하고, SSL 종료, 로드 밸런싱, 캐싱 등을 담당합니다. Nginx, Caddy, Traefik은 각각 다른 철학과 장점을 가지고 있어 사용 환경에 따라 최적 선택이 달라집니다.

Nginx — 업계 표준

# /etc/nginx/sites-available/app.conf
upstream backend {
    least_conn;
    server 127.0.0.1:3000 weight=3;
    server 127.0.0.1:3001 weight=2;
    server 127.0.0.1:3002 backup;
}

server {
    listen 443 ssl http2;
    server_name app.example.com;

    ssl_certificate     /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /static/ {
        root /var/www;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

Caddy — 자동 HTTPS

# Caddyfile
app.example.com {
    reverse_proxy localhost:3000 localhost:3001 {
        lb_policy least_conn
        health_uri /health
        health_interval 10s
    }

    file_server /static/* {
        root /var/www
    }

    encode gzip zstd

    log {
        output file /var/log/caddy/access.log
        format json
    }
}

# API 서버
api.example.com {
    reverse_proxy localhost:8080 {
        header_up X-Real-IP {remote_host}
    }
    rate_limit {remote.ip} 100r/m
}

Traefik — 동적 구성의 왕

# docker-compose.yml
version: '3'
services:
  traefik:
    image: traefik:v3.0
    command:
      - --providers.docker=true
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --certificatesresolvers.le.acme.email=admin@example.com
      - --certificatesresolvers.le.acme.storage=/acme/acme.json
      - --certificatesresolvers.le.acme.httpchallenge.entrypoint=web
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  app:
    image: myapp:latest
    labels:
      - traefik.enable=true
      - traefik.http.routers.app.rule=Host('app.example.com')
      - traefik.http.routers.app.tls.certresolver=le
      - traefik.http.services.app.loadbalancer.server.port=3000

3종 비교표

항목NginxCaddyTraefik
SSL 자동화수동 (certbot)자동 내장자동 내장
설정 방식정적 파일Caddyfile/APIDocker Labels
성능최고우수우수
학습 곡선높음낮음중간
생태계매우 넓음성장 중컨테이너 특화
동적 구성reload 필요API 지원자동 감지
최적 환경범용소규모/중규모Kubernetes/Docker

선택 가이드

  • Nginx: 최고의 성능, 풍부한 모듈, 기존 인프라와 호환성이 중요할 때
  • Caddy: 간편한 설정, 자동 HTTPS가 필요한 소중규모 프로젝트
  • Traefik: Docker/Kubernetes 환경에서 서비스가 동적으로 추가/제거될 때
  • 세 가지 모두 HTTP/2, WebSocket, gRPC 프록시를 지원합니다
  • 대부분의 경우 성능 차이보다 운영 편의성이 더 중요한 선택 기준입니다

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록