文件防盗链可以防止其他网站直接链接你的资源(如图片、视频、文档等),从而节省你的带宽和服务器资源。以下是使用Nginx搭建防盗链服务的详细方法:
server {
listen 80;
server_name yourdomain.com;
location ~* \.(jpg|jpeg|png|gif|mp4|pdf)$ {
valid_referers none blocked yourdomain.com *.yourdomain.com;
if ($invalid_referer) {
return 403;
# 或者可以重定向到一张警告图片
# rewrite ^ /anti-hotlinking.jpg;
}
}
}
valid_referers
:定义合法的来源
none
:直接访问(无Referer)blocked
:Referer存在但被防火墙或代理删除yourdomain.com
:允许的主域名*.yourdomain.com
:允许的子域名server {
listen 80;
server_name yourdomain.com;
location /protected/ {
secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri your_secret_key";
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 410;
}
}
}
需要配合生成签名的代码(如PHP):
$secret = 'your_secret_key';
$expires = time() + 3600; // 链接1小时后失效
$path = '/protected/file.jpg';
$hash = md5($expires . $path . $secret);
$url = "http://yourdomain.com{$path}?md5={$hash}&expires={$expires}";
ngx_http_secure_link_module
location /download/ {
secure_link $arg_st,$arg_e;
secure_link_md5 "your_secret_key$uri$arg_e";
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 410;
}
}
白名单模式:只允许特定域名访问
valid_referers none blocked server_names
*.yourdomain.com
partner.com
*.trusted.com;
黑名单模式:禁止特定域名访问
if ($http_referer ~* (spammer.com|badsite.com)) {
return 403;
}
伪装资源:对于盗链请求返回替代内容
location ~* \.(jpg|jpeg|png|gif)$ {
valid_referers blocked yourdomain.com *.yourdomain.com;
if ($invalid_referer) {
rewrite ^ /fake-image.jpg;
}
}
限制特定文件类型
location ~* \.(mp4|mov|avi|flv)$ {
valid_referers none blocked yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
none
)nginx -s reload
通过以上配置,你可以有效地保护服务器上的资源不被其他网站盗用,节省带宽和服务器资源。