본문 바로가기
메모장

Nginx 기반 동영상 콘텐츠 서버 보안 설정

by 마이클장 2025. 3. 27.

1. 접근 제한 설정

🔹 1️⃣ 리퍼러(Referrer) 제한 (도메인 기반 접근 통제)

웹사이트 외부에서 직접 동영상을 링크하는 "핫링크 방지" 기능을 설정할 수 있습니다.

📌 Nginx 설정 (/etc/nginx/sites-available/default)

location /videos/ {
    root /var/www/html;
    valid_referers none blocked yourwebsite.com;
    if ($invalid_referer) {
        return 403;
    }
}

📌 Nginx 재시작

sudo systemctl restart nginx

이제 yourwebsite.com에서만 동영상을 재생 가능
다른 사이트에서 직접 동영상 링크 시 403 Forbidden 응답


🔹 2️⃣ IP 기반 접근 제한

특정 IP 또는 국가에서만 접근 가능하도록 제한할 수 있습니다.

📌 예: 내부 네트워크에서만 접근 가능하도록 제한

location /videos/ {
    root /var/www/html;
    allow 192.168.1.0/24;
    deny all;
}

📌 예: 특정 국가 차단 (GeoIP2 모듈 사용)

geoip2 /etc/nginx/GeoLite2-Country.mmdb {
    $geoip2_data_country_code country iso_code;
}

location /videos/ {
    root /var/www/html;
    if ($geoip2_data_country_code = "CN") {
        return 403;
    }
}

이제 중국에서 접근하는 사용자 차단 가능
MaxMind의 GeoIP2 데이터베이스 필요 (GeoLite2-Country.mmdb)


2. 인증 및 토큰 보안 적용

🔹 3️⃣ JWT 토큰 인증 적용 (유료 사용자 보호)

강의 콘텐츠가 유료거나, 로그인한 사용자만 볼 수 있도록 JWT 토큰을 활용하여 보안을 강화할 수 있습니다.

📌 Nginx에서 JWT 인증 활성화

location /videos/ {
    root /var/www/html;
    auth_request /auth;
}

location = /auth {
    internal;
    proxy_pass http://backend/auth-check;
    proxy_set_header X-Original-URI $request_uri;
}

JWT 인증이 없는 사용자는 접근 불가
백엔드에서 로그인 확인 후 JWT 발급


🔹 4️⃣ 임시 URL (Signed URL) 사용

동영상을 직접 링크하는 대신, 일정 시간 후 만료되는 임시 URL을 생성하여 보안 강화

📌 임시 URL 예시 (generate_signed_url.php)

http://yourdomain.com$url?expires=$expires&signature=$signature";

echo $signed_url;
?>

📌 Nginx 설정 (/etc/nginx/sites-available/default)

location /videos/ {
    root /var/www/html;
    
    set $secret_key "your-secret-key";
    
    if ($arg_expires = "") { return 403; }
    if ($arg_signature = "") { return 403; }
    
    set $string "$request_uri$arg_expires";
    set $computed_signature $arg_signature;

    if ($computed_signature != $arg_signature) { return 403; }
    if ($arg_expires < $time_iso8601) { return 403; }
}

사용자는 유효한 서명과 만료 시간 내에서만 동영상 접근 가능
링크를 공유해도 일정 시간이 지나면 접근 불가


3. HTTPS 및 네트워크 보안

🔹 5️⃣ SSL/TLS 적용 (HTTPS 강제)

Nginx에서 Let’s Encrypt를 사용하여 HTTPS를 적용하면, 통신 암호화중간자 공격 방지가 가능합니다.

📌 Let’s Encrypt SSL 인증서 발급

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

📌 HTTPS 강제 적용 (Nginx 설정)

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    
    location /videos/ {
        root /var/www/html;
    }
}

모든 동영상 요청이 HTTPS를 통해 안전하게 전송됨


4. 서버 보호 및 부하 관리

🔹 6️⃣ 다운로드 제한 (대역폭 및 트래픽 관리)

동영상을 과도하게 다운로드하는 사용자를 제한하여 서버 과부하 방지

📌 Nginx에서 대역폭 제한

limit_rate 1m;  # 초당 1MB로 제한

📌 Nginx에서 동시 접속 제한

limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 5;  # IP당 동시 5개 연결 제한

과도한 다운로드 시도 방지하여 서버 보호


결론

리퍼러 및 IP 제한으로 불법 접근 차단
JWT 인증 및 임시 URL(Signed URL)로 유료 콘텐츠 보호
SSL 적용으로 보안 강화
다운로드 속도 및 동시 접속 제한으로 서버 과부하 방지


 

'메모장' 카테고리의 다른 글

Nginx 기반 동영상 콘텐츠 서버 구축 #1  (0) 2025.03.27