zoukankan      html  css  js  c++  java
  • nginx+防盗链+下载大文件+路径直接获取文件

    今天突然接到leader的issue,说超过一个G的大文件,下载不了。于是立马,查配置查资料。结果看到几个陌生名词。

    下载大文件:

    nginx: X-Accel-Redirect  //nginx自带,很方便,尤其和yii框架结合使用,更方便。
    squid: X-Accelerator-Vary
    apache: X-Sendfile   //apache的一个第三方组件,需要安装
    lighttpd: X-Sendfile/X-LIGHTTPD-send-file 

    以上为几个主流的web server ,对于下载,直接文件读取,最吃内存,flush()处理次之,用以上方式,最省内存,吹牛逼点说,是“零内存”消耗。

    对于yii框架用户,甚是简单。

    1/  程序里面,判断文件是否存在,用户是否有下载权限。

    2/  Yii::app()->request->xSendFile($url,array('forceDownload'=>1,'xHeader'=>'X-Accel-Redirect'));  // $url 就是你的文件的相对路径。yii中xSendFile函数封装的相当好,apache 和 lighttpd都考虑到了。

    相关链接:

    http://www.phpweblog.net/phpbaby/archive/2012/07/10/7709.html

    http://wiki.nginx.org/XSendfile

    http://www.cnblogs.com/cevin/archive/2012/03/22/2411972.html

    防盗链:

    定义:盗用他人网站的图片或视频链接,将链接放到自己网站,实现增加网站内容的效果。该方法加重他人网站负载,提升自己流量。

    两种方式:

    No 1:  原理:通过http协议的头部referer字段,可以检测请求来源,如果referer字段中的url是别人的域名,说明已经被盗用。

    location ~* .(gif|jpg|png|swf|flv)$ {
    valid_referers none blocked www.ccvita.com www.phpq.net;
    if ($invalid_referer) {
    rewrite ^/ http://www.ccvita.com/403.html;
    #return 404;
    }
    }
    第一行:gif|jpg|png|swf|flv
    表示对gif、jpg、png、swf、flv后缀的文件实行防盗链
    第二行:www.ccvita.com www.phpq.net
    表示对www.ccvita.com www.phpq.net这2个来路进行判断
    if{}里面内容的意思是,如果来路不是指定来路就跳转到错误页面,当然直接返回404也是可以的。

    No 2:nginx的一个组件。

    推荐使用NginxHttpAccessKeyModule这个东西。

    相关链接:

    http://www.ccvita.com/312.html

    阻止绝对路径获取文件:

    web下,有时下载模块处理再好,也难免不被客户端截取到相对路径。再拼接个主机域名,直接访问,资源便不安全了。

    还好,apache 和 nginx都有对应的处理。

    nginx:目录权限设置 

    //假如uploads即是我们需要保护的目录,不能让客户端通过拼接直接访问

    location /uploads {    
        internal; //下载正常,但拼接无法打开。因为internal作用使得只能程序内部请求才处理
        alias /home/liang/media/uploads; //这边我们重写url,使下载路径指向真实资源路径。
        autoindex off;        
    }
    location /uploads {             //下载,拼接都无法打开
         deny all;
    }

    apache:目录设置与其类似

    相关链接:

    http://www.nginx.cn/692.html

    1、以专家为榜样,不必自己重新探索
    2、解构技能,找出实现80%效果的那20%
    3、不要一心二用
    4、练习练习再练习!然后获得即时反馈
    5、坚持,不要在低谷期放弃
  • 相关阅读:
    CF 120F Spider 树的直径 简单题
    POJ 1155 TELE 背包型树形DP 经典题
    CF 219D Choosing Capital for Treeland 树形DP 好题
    POJ 3162 Walking Race 树形DP+线段树
    HDU 2196 Computer 树形DP 经典题
    __str__()、__repr__()和__format__()
    item系列方法
    getattribute
    isinstance和issubclass
    继承方式完成包装
  • 原文地址:https://www.cnblogs.com/zhongyuan/p/3292283.html
Copyright © 2011-2022 走看看