diff --git a/nginx/nginx.prod.conf b/nginx/nginx.prod.conf index 1ec5de6..17f90ab 100644 --- a/nginx/nginx.prod.conf +++ b/nginx/nginx.prod.conf @@ -11,6 +11,11 @@ http { include /etc/nginx/mime.types; default_type application/octet-stream; + map $http_upgrade $connection_upgrade { + default upgrade; + '' keep-alive; + } + upstream next_server { server kokomen-client:3000; keepalive 32; @@ -24,13 +29,13 @@ http { sendfile on; keepalive_timeout 65; - # HTTP는 두 도메인을 모두 HTTPS로 리다이렉트 + # HTTP는 HTTPS로 리다이렉트 server { listen 80; listen [::]:80; server_name kokomen.kr; - # Certbot HTTP-01 챌린지 처리용 (인증서 발급/갱신 시 필요) + # Certbot HTTP-01 챌린지 처리 location /.well-known/acme-challenge/ { root /var/www/certbot; } @@ -44,11 +49,14 @@ http { } # ------------------------------- - # dev.kokomen.kr (프론트엔드) + # kokomen.kr (프론트엔드) # ------------------------------- server { - listen 443 ssl http2; - listen [::]:443 ssl http2; + # http2 지시어는 listen과 분리 (deprecated 경고 해결) + listen 443 ssl; + listen [::]:443 ssl; + http2 on; + server_name kokomen.kr; # Let’s Encrypt 인증서 경로 @@ -60,7 +68,7 @@ http { ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; - # 보안 헤더 (필요 시 조정) + # 보안 헤더 add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options SAMEORIGIN always; add_header Referrer-Policy strict-origin-when-cross-origin always; @@ -71,7 +79,7 @@ http { # WebSocket 지원 proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; + proxy_set_header Connection $connection_upgrade; # map으로 정의된 변수 사용 # 원본 헤더 보존 proxy_set_header Host $host; @@ -79,7 +87,7 @@ http { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - # 타임아웃/버퍼 (Next.js 빌드/SSR 상황에 따라 조정) + # 타임아웃/버퍼 (Next.js SSR 상황에 따라 조정) proxy_read_timeout 60s; proxy_send_timeout 60s; } @@ -88,4 +96,4 @@ http { access_log /var/log/nginx/dev_kokomen_access.log main; error_log /var/log/nginx/dev_kokomen_error.log warn; } -} \ No newline at end of file +}