>  기사  >  운영 및 유지보수  >  Nginx에서 파일 안티 리칭 서비스를 구축하는 방법

Nginx에서 파일 안티 리칭 서비스를 구축하는 방법

WBOY
WBOY앞으로
2023-05-11 23:58:201190검색

머리말

현재 많은 웹사이트에서 정보 다운로드 비용을 청구한다는 사실은 누구나 알고 있습니다. 포인트든 금화든 무료라고만 말할 수 있습니다. 그렇다면 이러한 웹사이트는 어떻게 리소스 도난을 방지할 수 있을까요?

여기에서는 nginx 자체에서 secure_link를 제공하여 핫링크 방지 기능을 제공하는 아티팩트를 권장합니다. 서버 파일 링크에 타임스탬프를 추가하고 코드를 확인하여 서버 파일이 다운로드되거나 도난당하는 것을 방지할 수 있습니다.

타이밍 다이어그램

Nginx에서 파일 안티 리칭 서비스를 구축하는 방법

nginx 구성

여기에서는 nginx 설치 방법을 설명하지 않습니다. 설치 시 ngx_http_secure_link_module을 켜는 것만 기억하세요.

./configure --with-http_secure_link_module #编译nginx时加入

설치 완료 감지:

nginx -v

다음 지침이 나타나면 구성에 성공한 것입니다.

configure 인수: --with-http_secure_link_module --prefix=/usr/local/nginx --with-http_stub_status_module

인스턴스 구성

server {
   listen    80;
   server_name download.52itstyle.com;
   charset utf-8;
   location / {
     #这里配置了2个参数一个是md5,一个是expires
     secure_link $arg_md5,$arg_expires;
     #md5的哈希格式为 secret+url+expires,expires为时间戳单位s,url为请求地址
     secure_link_md5 52itstyle$uri$arg_e;
     #这里我们的md5是我们按照secure_link_md5的方式计算的哈希,secure_link会比对它计算的哈希值是否与我们的md5参数一致
     if ($secure_link = "") {
       #资源不存在或哈希比对失败
       return 402;
     }
     if ($secure_link = "0") {
       #失效超时
       return 405;
     }
     #重命名文件名
     add_header content-disposition "attachment;filename=$arg_f";
     alias /data/site/down.52itstyle.com/;
   }
   error_page  500 502 503 504 /50x.html;
   error_page  402 405 /40x.html;
   location = /50x.html {
     root  html;
   }
   location = /40x.html {
     root  html;
   }
}

매개변수 세부정보

secure_link

구문: secure_link 표현;

기본값: 없음

구성 섹션: http, server, location

표현식은 확인 값과 만료 시간으로 구성됩니다. 여기서 verify 값은 secure_link_md5에 지정된 매개변수의 md5 해시 값과 비교됩니다.

두 값이 일치하지 않으면 $secure_link 변수 값이 비어 있고, 두 값이 일치하면 만료 확인이 수행되며 $secure_link 변수 값은 0입니다. ; 만료되지 않은 경우 1입니다.

링크가 시간에 민감한 경우 만료 시간은 md5 해시 값 다음에 쉼표로 구분되어 선언되는 타임스탬프로 설정됩니다. 만료 시간을 설정하지 않으면 링크는 영원히 유효합니다.

secure_link_md5

구문: ​​secure_link_md5 표현식;

기본값: 없음

구성 섹션: http, server, location

표현식은 md5 해시 값을 계산하기 위한 매개변수를 지정합니다. URL에 전달된 md5 값이 비교되고 확인됩니다. 표현식에는 일반적으로 uri(예: 데모.com/s/link uri는 /s/link임) 및 암호화 키 비밀이 포함됩니다. 링크가 시간에 민감한 경우 표현식에는 $secure_link_expires가 포함되어야 합니다. 접속 IP, 브라우저 버전 정보 등

java 백엔드 구성

사례, 참고용:

import org.apache.commons.codec.binary.base64;
import org.apache.commons.codec.digest.digestutils;
/**
 * 生成加密連接
 */
public class securelink {
  private static string site = "https://down.52itstyle.com/";
  private static string secret = "52itstyle";
  public static string createlink(string path,string filename){
    string time = string.valueof((system.currenttimemillis() / 1000) + 300); // 5分钟有效
    string md5 = base64.encodebase64urlsafestring(digestutils.md5(secret + path + time));
    string url = site + path + "?md5=" + md5 + "&expires=" + time + "&f="+filename;
    return url;
  }
  public static void main(string[] args) {
    //https://down.52itstyle.com/2018101025689452.pdf?md5=fndyyfzcooi9q8sh1ffkxg&expires=1539847995&f=分布式秒杀架构.pdf
    system.out.println(createlink("2018101025689452.pdf","分布式秒杀架构.pdf"));
  }
}

위 내용은 Nginx에서 파일 안티 리칭 서비스를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제