Rumah > Artikel > Operasi dan penyelenggaraan > Bagaimana untuk membina perkhidmatan anti-lintah fail dalam Nginx
Kata Pengantar
Semua orang tahu bahawa banyak laman web kini mengenakan bayaran untuk memuat turun maklumat, sama ada mata atau syiling emas Jika anda ingin membebaskannya, anda hanya boleh mengatakan bahawa ada sangat sedikit, jadi tapak web ini Bagaimana untuk mengelakkan pautan panas sumber?
Berikut ialah artifak yang agak mudah digunakan, nginx sendiri menyediakan secure_link untuk melengkapkan fungsi anti-leeching. Ia boleh menambah cap masa dan menyemak kod pada pautan fail pelayan, dengan itu melindungi fail pelayan daripada dimuat turun dan dicuri. .
Rajah masa
konfigurasi nginx
Cara memasang nginx tidak akan diterangkan di sini ia apabila memasang ngx_http_secure_link_module sudah memadai.
./configure --with-http_secure_link_module #编译nginx时加入
Pengesanan selesai pemasangan:
nginx -v
Jika arahan berikut muncul, konfigurasi berjaya:
konfigurasi argumen: --with-http_secure_link_module --prefix= /usr/local /nginx --with-http_stub_status_module
Konfigurasi instance
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; } }
Butiran parameter
secure_link
Sintaks: secure_link expression;
Nilai lalai: Tiada Ia terdiri daripada masa, di mana nilai semakan akan dibandingkan dengan nilai cincang md5 parameter yang ditentukan dalam secure_link_md5.
Jika kedua-dua nilai tidak konsisten, nilai pembolehubah $secure_link adalah kosong; pembolehubah secure_link ialah 0; jika ia belum tamat tempoh, ia adalah 1 .
Jika pautan sensitif masa, masa tamat tempoh ditetapkan dengan cap masa, diisytiharkan selepas nilai cincang md5, dipisahkan dengan koma. Jika tiada masa tamat ditetapkan, pautan itu sah selama-lamanya.
secure_link_md5Sintaks: secure_link_md5 expression;Nilai lalai: Tiada
Bahagian konfigurasi: http, pelayan, lokasi
ungkapan menentukan parameter untuk mengira nilai cincang md5 Nilai md5 akan dibandingkan dan disahkan dengan nilai md5 yang dihantar dalam URL. Ungkapan secara amnya mengandungi uri (contohnya, demo.com/s/link uri ialah /s/link) dan rahsia kunci penyulitan Jika pautan itu sensitif masa, ungkapan perlu mengandungi $secure_link_expires juga boleh menambah maklumat pelanggan, seperti sebagai IP akses, maklumat versi penyemak imbas, dsb.
konfigurasi hujung belakang java kes, untuk rujukan sahaja: 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"));
}
}
Atas ialah kandungan terperinci Bagaimana untuk membina perkhidmatan anti-lintah fail dalam Nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!