nginx配置防盗链
在server块中加入以下配置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|pdf|doc|docx|pptx|ppt|xls|xlsx)$ {
root /www;
valid_referers a.cn *.b.cn 192.168.1.110;
if ($invalid_referer) {
return 403;
}
}
valid_referers 内容为允许访问的域名
可设置多个域名或ip
设置完之后不在此配置中的域名将无法访问该资源
若使用则返回403错误,也可自由设置返回值或跳转到其他链接。
若该图片或者文件资源需要被app端访问
则可以尝试配置文件中转接口
以下是我的解决接口
//$file为资源文件的url地址,如http://www.tu-do.cn/a.png
public function fapi($file='')
{
if($file){
//获取文件名
$type =explode("/" , $file);
$count = count($type)-1;
$file_name = $type[$count];
//伪造来路 来路必须为nginx配置文件中允许的域名和ip
$refer = 'http://a.cn';
$opt = [a.cn
'http' => [
'header' => "Referer: $refer"
]
];
$context = stream_context_create($opt);
//如果是图片资源的话需要加以下这句
ob_end_clean();
header("Content-Disposition:attachment;filename=".$file_name);
echo file_get_contents($file,false, $context);
}
}
可能有的服务器会碰到图片无法显示或者下载下来图片不可用
这种情况就必须加ob_end_clean();
这样app就可以通过这个接口来访问资源文件了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<img src="api.php" alt="">
<img src="xxx/fapi?file=http://www.tu-do.cn/a.png" alt="">
<a href="xxx/fapi?file=http://www.tu-do.cn/a.png">下载文件</a>
</body>
</html>
有问题可在下方留言讨论,或者邮箱联系我,邮箱地址在网站下方。
转载无需和我联系,但请注明来自木点点博客http://www.tu-do.cn/
最新评论