From 00a49405b200a89b37d0516876030913c6c5ecab Mon Sep 17 00:00:00 2001 From: seoyoon Date: Mon, 16 Feb 2026 18:02:42 +0900 Subject: [PATCH] =?UTF-8?q?docs:https=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 3 +++ nginx/default.conf | 44 +++++++++++++++++++++++++++++++------------- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 53d46e6..25afe83 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,10 +4,13 @@ services: image: nginx:alpine ports: - "80:80" + - "443:443" # 추가 volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf - ./backend-core/media:/app/media - ./backend-core/staticfiles:/app/staticfiles + - /etc/letsencrypt:/etc/letsencrypt # 추가 (인증서 파일) + - /var/lib/letsencrypt:/var/lib/letsencrypt # 추가 (인증서 관리용) depends_on: - backend-core - backend-chat diff --git a/nginx/default.conf b/nginx/default.conf index bd7ce11..0560903 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -6,23 +6,41 @@ upstream chat { server backend-chat:8001; } +# 1. HTTP 접속을 HTTPS로 자동 리다이렉트 server { listen 80; + server_name uniquestpiro.xyz www.uniquestpiro.xyz; + return 301 https://$host$request_uri; +} + +# 2. 실제 HTTPS 통신 설정 +server { + listen 443 ssl; + server_name uniquestpiro.xyz www.uniquestpiro.xyz; - # 1. Django 일반 페이지 및 API 처리 + # 발급받은 인증서 경로 (docker-compose에서 연결해줄 경로입니다) + ssl_certificate /etc/letsencrypt/live/uniquestpiro.xyz/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/uniquestpiro.xyz/privkey.pem; + + # SSL 보안 최적화 설정 (선택사항이지만 권장) + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + + # Django 일반 페이지 및 API 처리 location / { proxy_pass http://core; 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; } - # 2. 미디어 파일 처리 (이미지 업로드/조회 필수!) + # 미디어 파일 처리 location /media/ { - alias /app/media/; # docker-compose에서 연결한 경로 + alias /app/media/; } - # 3. 채팅 서버 (WebSocket) + # 채팅 서버 (WebSocket) - HTTPS 환경에서는 wss:// 로 접속하게 됩니다 location /ws/ { proxy_pass http://chat; proxy_http_version 1.1; @@ -31,30 +49,30 @@ server { 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; proxy_read_timeout 86400; } - # ✨ 4. SSE 스트림 (미션 실시간 업데이트) + # SSE 스트림 (미션 실시간 업데이트) location /stream/ { proxy_pass http://chat; proxy_http_version 1.1; - proxy_set_header Connection ''; # SSE는 keep-alive 필요 + proxy_set_header Connection ''; 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; - # SSE 핵심 설정 - proxy_buffering off; # nginx 버퍼링 비활성화 (즉시 전송) - proxy_cache off; # 캐시 비활성화 - proxy_read_timeout 86400; # 24시간 타임아웃 - chunked_transfer_encoding off; # 청크 전송 비활성화 + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 86400; + chunked_transfer_encoding off; - # CORS 설정 (필요시) add_header Cache-Control 'no-cache'; add_header X-Accel-Buffering 'no'; } - # 5. 정적 파일 처리 (CSS/JS) + # 정적 파일 처리 location /static/ { alias /app/staticfiles/; }