QUIC nginx lets encrypt 설정

agnusdei·2025년 4월 5일

Nginx에 QUIC(HTTP/3) 설정 + Let's Encrypt 적용 (하위 호환성 고려)

하위 호환성을 고려한 전체 설정 방법

1. 기본 요구사항 확인

  • Nginx 1.25.0+ (공식 HTTP/3 지원)
  • OpenSSL 1.1.1+ (TLS 1.3 필수)
  • UDP 443 포트 개방 확인

2. Let's Encrypt 인증서 설치 (모든 프로토콜 호환)

sudo apt update
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com

3. 하위 호환성을 고려한 Nginx 설정

/etc/nginx/sites-available/yourdomain.com 파일 수정:

server {
    # HTTP/3 (QUIC) - UDP 443
    listen 443 quic reuseport;
    
    # HTTP/2 및 HTTP/1.1 - TCP 443
    listen 443 ssl http2;
    
    # IPv6 지원
    listen [::]:443 quic reuseport;
    listen [::]:443 ssl http2;
    
    server_name yourdomain.com;
    
    # Let's Encrypt 인증서
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    
    # 최신 보안 프로토콜 설정 (하위 호환성 유지)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    
    # HTTP/3 지원 알림 (Alt-Svc 헤더)
    add_header Alt-Svc 'h3=":443"; ma=86400, h3-29=":443"; ma=86400';
    
    # HTTP Strict Transport Security
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
    
    # 기타 웹사이트 설정
    root /var/www/html;
    index index.html;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

# HTTP → HTTPS 자동 리다이렉트 (모든 버전 호환)
server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
}

4. 필수 모듈 활성화 확인

sudo nginx -T | grep -E 'http_v3_module|http_ssl_module|http_v2_module'

5. 방화벽 설정 (TCP/UDP 모두 허용)

sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw reload

6. Nginx 재시작

sudo systemctl restart nginx

호환성 검증 방법

  1. 크롬 브라우저:

    • chrome://net-internals/#quic 접속 → 활성화 확인
    • 개발자 도구 → 네트워크 탭 → 프로토콜 열 표시
  2. curl 테스트:

    # HTTP/1.1 테스트
    curl -I --http1.1 https://yourdomain.com
    
    # HTTP/2 테스트
    curl -I --http2 https://yourdomain.com
    
    # HTTP/3 테스트 (curl 7.66.0+ 필요)
    curl -I --http3 https://yourdomain.com
  3. 온라인 검사 도구:

문제 발생 시 점검 사항

  1. QUIC가 작동하지 않는 경우:

    • UDP 443 포트 차단 확인
    • reuseport 옵션 확인
    • Nginx 버전 재확인
  2. 구형 브라우저 지원:

    • TLS 1.2가 활성화되었는지 확인
    • HTTP/2가 함께 활성화되었는지 확인
  3. 인증서 갱신:

    # 갱신 테스트
    sudo certbot renew --dry-run
    
    # 실제 갱신
    sudo certbot renew
    sudo systemctl reload nginx

이 설정은 다음과 같은 호환성을 보장합니다:

  • 최신 브라우저: HTTP/3 (QUIC)
  • 대부분의 현대 브라우저: HTTP/2
  • 구형 브라우저/클라이언트: HTTP/1.1
  • 모든 연결: TLS 보안 적용
profile
DevSecOps Pentest🚩

0개의 댓글