✅ 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 |
---|