머리말
현재 많은 웹사이트에서 정보 다운로드 비용을 청구한다는 사실은 누구나 알고 있습니다. 포인트든 금화든 무료라고만 말할 수 있습니다. 그렇다면 이러한 웹사이트는 어떻게 리소스 도난을 방지할 수 있을까요?
여기에서는 nginx 자체에서 secure_link를 제공하여 핫링크 방지 기능을 제공하는 아티팩트를 권장합니다. 서버 파일 링크에 타임스탬프를 추가하고 코드를 확인하여 서버 파일이 다운로드되거나 도난당하는 것을 방지할 수 있습니다.
타이밍 다이어그램
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!