# LiveKit 시그널링(wss) 리버스 프록시 — 도커 컨테이너 nginx 용 참조 설정
#
# 사용법:
#   1) 이 파일을 운영 nginx 의 conf.d 에 복사: nginx.livekit.conf (.example 제거)
#   2) <도메인> / 인증서 경로를 실제 값으로 치환
#   3) nginx 컨테이너를 base compose 의 외부 `proxy` 네트워크에 join (아래 주석 참고)
#   4) docker compose ... exec nginx nginx -s reload (또는 컨테이너 재기동)
#
# 전제(자세한 내용: livekit/DEPLOY.md 4·4-1장):
#   - LiveKit 컨테이너는 `selfhost-livekit` 프로파일로 기동되어 `proxy` 네트워크에 있다.
#   - nginx 컨테이너도 같은 `proxy` 네트워크에 있어야 `livekit` 이름이 해석된다.
#     (호스트 설치형 nginx 라면 docker-compose 의 livekit 7880 을 ports 로 publish 한 뒤
#      proxy_pass 를 http://127.0.0.1:7880 으로 바꾼다.)
#   - 미디어(RTC: 7881/tcp, 7882/udp)는 이 프록시를 거치지 않고 서버 공인 IP 로 직접 통신한다.

# HTTP → HTTPS 강제 리다이렉트 (Let's Encrypt 갱신 경로는 통과)
server {
  listen 80;
  server_name livekit.<도메인>;

  location /.well-known/acme-challenge/ {
    root /var/www/certbot;
  }
  location / {
    return 301 https://$host$request_uri;
  }
}

# 시그널링(wss) 종단 → LiveKit 7880
server {
  listen 443 ssl;
  http2 on;
  server_name livekit.<도메인>;

  # 이 서브도메인용 인증서 (certbot 등으로 발급)
  ssl_certificate     /etc/letsencrypt/live/livekit.<도메인>/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/livekit.<도메인>/privkey.pem;

  # 도커 내장 DNS — `livekit` 업스트림을 런타임에 해석해 부팅 순서 의존을 제거한다.
  # (이 줄과 변수 proxy_pass 가 없으면 livekit 컨테이너가 늦게 뜰 때 nginx 가 부팅 실패한다.)
  resolver 127.0.0.11 valid=30s;

  location / {
    set $lk http://livekit:7880;          # 변수로 받아 런타임 해석
    proxy_pass $lk;

    # WebSocket 업그레이드 (시그널링)
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    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;   # TLS 종단이므로 백엔드에 https 알림

    # 장수명 WebSocket 유지
    proxy_read_timeout  600s;
    proxy_send_timeout  600s;
  }
}

# ─────────────────────────────────────────────────────────────────────────────
# nginx 컨테이너를 `proxy` 네트워크에 연결하는 예 (운영 nginx 의 compose 발췌):
#
#   services:
#     nginx:
#       # ...
#       networks:
#         - proxy            # base compose 의 external proxy 네트워크
#   networks:
#     proxy:
#       external: true
# ─────────────────────────────────────────────────────────────────────────────
