设为首页 收藏本站
查看: 600|回复: 0

[经验分享] Nginx简单的防盗链和带宽限制-转载

[复制链接]

尚未签到

发表于 2016-12-27 09:31:35 | 显示全部楼层 |阅读模式
  原文:http://floss.zoomquiet.io/data/20110312151223/index.html
  很多时候,服务不是被用户流量击垮,而是被大量的对你没有任何贡献的盗链击倒,所以作为一个web站点防盗链是首先要考虑的问题,目前来说,对于各个 web服务器,简单的防盗链方法多数是做rewrite,判断referer是否有效,当然高端的伪造referer的情况不在这里讨论。

      在apache下,防盗链的方法有很多,你可以看看apache的日志,有多少是外部直接referer过来的,有可能比内部引用还多,尤其是图片和下载类站点更加明显。在apache下,最简单的防盗链使用类似这个形式:

SetEnvIfNoCase Referer "^http://www.google.com" local_ref=1
SetEnvIfNoCase Referer "^http://google.com" local_ref=1
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref

或者在apache下使用RewriteEngine on,然后使用RewriteCond {HTTP_REFERER} 来定义,这些都是防止比较低级的盗链,如果是面对迅雷或者其他的话,这个远远不够,但是不是这里讨论的范围。

    对于nginx而言,本身也有简单的防盗链模块ngx_http_referer_module,配置比较简单,定义文件类型:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
      valid_referers none blocked server_names *.163.com 163.com baidu.com;
      if ($invalid_referer) {return 403;}
    expires      30d;
}


具体的可以参考这里:http://wiki.nginx.org//NginxHttpLimitZoneModule,同时还有一个第三的防盗链相关模块,ngx_http_accesskey_module:
location /download {
accesskey             on;
accesskey_hashmethod md5;
accesskey_arg         "key";
accesskey_signature   "mypass$remote_addr";
}


具体的使用方法:http://wiki.nginx.org//NginxHttpAccessKeyModule


    对于带宽限制,apache可以动态编译一些模块进去,mod_evasive20.so和mod_bw.so都是对防止简单的dos和带宽限制而存在 的,而对于nginx,可以使用nginx的标准模块ngx_http_limit_zone_module,进行会话的并发连接数控制:
http {
    limit_zone   one $binary_remote_addr 10m;
#
定义一个叫“one”的记录区,总容量为 10M,以变量 $binary_remote_addr 作为会话的判断基准(即一个地址一个会话)

    ...
    server {
        ...
        location /attachments/ {
            limit_conn   one 1;
            limit_rate 100k;
        }

# 限制 /
attachments
/ 目录下,一个会话只能进行一个连接。超过一个,则返回503。imit_rate 来控制该目录的下载速度。
}


这是简单的nginx的方案,更高级的应用应该是在客户端类型或者根据日志分析后,针对具体问题做文章,例如对$http_user_agent的特殊内容进行匹配,然后返回503。

为什么要返回503?如果直接返回403,有可能被下载工具发现,403的状态被认为被禁止了,然后进行调整继续作案。而返回一个503,对服务器来说影响不大,只占用一个nginx的线程而已。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-320026-1-1.html 上篇帖子: 令 Nginx 后端的 Apache 获取到互联网 IP 下篇帖子: 使用google-perftools优化nginx在高并发时的性能完整教程[第二版]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表