`
huchangan2005
  • 浏览: 78221 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Nginx简单的防盗链和带宽限制-转载

阅读更多

原文: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的线程而已。

分享到:
评论

相关推荐

    nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

    Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route (a)客户端首次发起访问请求,nginx接收后,发现...

    nginx-http-flv-module-master

    h265在相同的视频质量下,数据压缩率比h264提高了大约50%,这意味着用户可以享受更高清的视频,同时降低带宽消耗。 Nginx-HTTP-FLV-Module-Master模块的实现,意味着Nginx现在能够处理h265编码的FLV流,这为使用...

    nginx-upstream-jvm-route-1.15

    【标题】"nginx-upstream-jvm-route-1.15" 涉及的核心知识点是Nginx的upstream模块与JVM路由的整合,特别针对Nginx 1.15版本。这个项目旨在解决在配置Nginx时遇到的特定错误提示“nginx: [emerg] invalid parameter ...

    nginx + nginx-http-flv-module-1.2.9

    `nginx` 和 `nginx.pid` 可能是用于启动和停止 Nginx 服务的脚本和进程 ID 文件。 7. **源代码** `src` 目录包含了 Nginx 和 http-flv 模块的核心源代码。如果你需要自定义或调试模块功能,可以在这里进行。 8. *...

    nginx-http-flv-module-1.2.10(包含nginx-rtmp-module)

    Nginx是一个高性能的HTTP和反向代理服务器,广泛用于Web服务器领域,尤其在处理静态内容和高并发场景下表现出色。Nginx-http-flv-module是针对Nginx的一个扩展模块,它允许Nginx支持HTTP实时流传输协议...

    nginx-1.19.3_nginx-http-flv-module.rar

    Nginx是一款高性能的Web服务器和反向代理服务器,广泛应用于高并发场景,因其轻量级、高效稳定而受到青睐。1.19.3是Nginx的一个具体版本,通常每个新版本都会包含错误修复、性能提升以及新功能的添加。 `nginx-...

    win环境使用nginx的nginx-http-flv-module.zip

    在windows 7 64位 环境下使用nginx的nginx-http-flv-module搭建flv视频流播放所有的安装包,参考:https://blog.csdn.net/qq_33071429/article/details/102628008

    nginx/1.21.6 &nginx-http-flv-module-1.2.10

    2. **RTMP Support in Nginx**:通过安装和配置nginx-rtmp-module,Nginx可以作为RTMP服务器接收和分发流媒体内容。RTMP协议适合实时内容,如直播事件,因为它的延迟低。Nginx可以接受来自摄像机、编码器或其他RTMP...

    nginx-http-flv-module-master.zip

    nginx-http-flv-module-master, 因为RTMP,HLS 都会存在这样那样的缺点,为了更好的解决延时问题、拉流兼容性问题,所以我们准备用flv.js 进行拉流。 对应的nginx组件

    windows平台nginx编译nginx-http-flv-module

    Nginx是一款高性能的Web服务器和反向代理服务器,以其高效的并发处理能力和轻量级的内存占用而著名。它广泛用于静态资源服务、动态内容转发和负载均衡等场景。 **HTTP FLV Module**是Nginx的一个扩展模块,主要用于...

    nginx-sticky-module-1.25.zip

    nginx sticky是nginx的module,可以实现基于cookie的负载均衡。 下载后,在编译安装nginx时,用--add-module选项,指到sticky所在目录。类似命令如下: ./configure --prefix=/usr/local/nginx-1.6.0 --add-module=...

    nginx带nginx-http-flv模块windows编译版rtmp

    Nginx以其高效的事件驱动模型和非阻塞I/O机制,在资源消耗上具有显著优势。 **Nginx-RTMP模块** Nginx-RTMP是Nginx的一个扩展模块,由Adobe Systems开发,用于支持Real-Time Messaging Protocol (RTMP)。RTMP是一...

    nginx上传下载之nginx-upload-module-2.3.0

    请注意,这个基本配置仅用于演示,实际应用中可能需要考虑更多的安全和性能因素,比如限制 IP 地址、设置防盗链策略、使用缓存等。 总之,Nginx Upload Module 2.3.0 提供了一种有效的方式来管理和处理大文件上传,...

    nginx1.16+nginx-upstream-check-module-master+nginx-upload-module

    在IT行业中,Nginx是一款广泛应用的高性能反向代理服务器,因其高效稳定和灵活的配置而备受青睐。这里我们关注的是一个包含特定模块的Nginx配置:`nginx1.16`,`nginx-upstream-check-module-master` 和 `nginx-...

    nginx-1.19.6_nginx-http-flv-module(64位)

    Nginx是一款高性能的Web服务器和反向代理服务器,它以其轻量级、高并发和稳定性著称。Nginx-1.19.6是Nginx的一个版本,发布于2020年11月27日。这个版本可能包含了性能优化、错误修复以及新的特性和功能。Nginx的更新...

    nginx_tcp_proxy_module-master.zip

    nginx_tcp_proxy_module-master.zip

    fastdfs-nginx-module-正版V1.19-亲测可用 .zip

    3. 安全性:Nginx可以进行访问控制,限制非法请求,保护文件系统的安全。 4. 易于扩展:随着业务增长,可以轻松添加新的FastDFS存储节点,Nginx也能无缝增加新的服务器实例。 5. 日志管理:Nginx的日志功能可以...

    Nginx-GUI-For-Windows-x64-v1.6.zip

    总结来说,"Nginx-GUI-For-Windows-x64-v1.6.zip"提供的工具是针对Nginx服务器的可视化管理解决方案,它降低了运维的复杂度,提高了工作效率,使得对Nginx的管理和监控变得更加直观和便捷。对于那些不熟悉命令行操作...

    nginx-prometheus-exporter-0.11.0-linux-386.tar.gz

    "nginx-prometheus-exporter"是连接Nginx和Prometheus的关键桥梁,将Nginx的内部指标转换为Prometheus可以理解的格式。 这个名为"nginx-prometheus-exporter-0.11.0-linux-386.tar.gz"的压缩包,包含了用于在32位...

Global site tag (gtag.js) - Google Analytics