nginx服务器设置防盗链,并解决app图片文件不显示问题,配置中转服务器

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>

木点点 i
请先登录后发表评论
  • 最新评论
  • 总共0条评论