要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。

Nginx防盗链的配置

1、nginx针对文件类型的防盗链配置方法:

  1. location ~* \.(gif|jpg|png|swf|flv|bmp)$ {
    valid_referers none blocked *.chinaz.com chinaz.com;
    if ($invalid_referer) {
    #rewrite ^/ http://www.chinaz.com/403.html;
    return 403;
    }
    }

  这种方法是在server或者location段中加入:valid_referers none blocked,其中none表示空的来路,也就是直接访问,比如直接在浏览器打开一个文件,blocked表示被防火墙标记过的来路,*.chinaz.com表示所有子域名。

2、nginx针对文件目录的防盗链配置方法:

  1. location /img/ {
    root /data/img/;
    valid_referers none blocked *.chinaz.com chinaz.com;
    if ($invalid_referer) {
    rewrite ^/ http://www.chinaz.com/error.gif;
    #return 403;
    }
    }

Apache防盗链的配置

  Apache 防盗链的第一种实现方法,可以用 Rewrite 实现。首先要确认 Apache 的 rewrite module 可用:能够控制 Apache httpd.conf 文件的,打开 httpd.conf,确保有这么一行配置:

  1. LoadModule rewrite_module modules/mod_rewrite.so

  然后在相应虚拟主机配置的地方,加入下列代码:

  1. ServerName www.chinaz.com
    # 防盗链配置 参数
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^http://chinaz.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://chinaz.com$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.chinaz.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.chinaz.com$ [NC]
    RewriteRule .*\.(gif|jpg|swf)$ http://www.chinaz.com/img/nolink.gif [R,NC]

  chinaz.com/www.chinaz.com 表示自己的信任站点。gif|jpg|swf 表示要保护文件的扩展名(以|分开)。nolink.gif 盗链后的重定向页面/图片。用以输出警示信息,这张图片应该尽可能的小。

  有些用户使用的是虚拟主机,没有服务器的控制权,无法修改 httpd.conf 文件和重启服务器。那么请确认你的虚拟主机支持 .htaccess,将上面的配置写入 .htaccess 文件,放入根目录或图片所在的目录即可:

  1. # 防盗链配置
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^http://chinaz.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://chinaz.com$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.chinaz.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.chinaz.com$ [NC]
    RewriteRule .*\.(gif|jpg|swf)$ http://www.chinaz.com/img/nolink.gif [R,NC]

  通过判断referer变量的值,判断图片或资源的引用是否合法,只有在设定范围内的 referer,才能访问指定的资源,从而实现了防盗链(Anti-Leech)的目的。需要指出的是:不是所有的用户代理(浏览器)都会设置 referer 变量,而且有的还可以手工修改 referer,也就是说,referer 是可以被伪造的。本文所讲的,只是一种简单的防护手段。当然,应付一般的盗链也足够了。

Nginx 的代码是由一个核心和一系列的模块组成, 核心主要用于提供Web Server的基本功能,以及Web和Mail反向代理的功能;还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间平滑地进行交互。不过, 大多跟协议相关的功能和某应用特有的功能都是由nginx的模块实现的。这些功能模块大致可以分为事件模块、阶段性处理器、输出过滤器、变量处理器、协 议、upstream和负载均衡几个类别,这些共同组成了nginx的http功能。事件模块主要用于提供OS独立的(不同操作系统的事件机制有所不同) 事件通知机制如kqueue或epoll等。协议模块则负责实现nginx通过http、tls/ssl、smtp、pop3以及imap与对应的客户端 建立会话。

Nginx的核心模块为Main和Events,此外还包括标准HTTP模块、可选HTTP模块和邮件模块,其还可以支持诸多 第三方模块。Main用于配置错误日志、进程及权限等相关的参数,Events用于配置IO模型,如epoll、kqueue、select或poll 等,它们是必备模块。

 3防盗链
(1) 定义合规的引用
valid_referers none | blocked | server_names | string ...;
(2) 拒绝不合规的引用
if  ($invalid_referer) {
rewrite ^/.*$ http://www.b.org/403.html 
}

valid_referers

语法:valid_referers [none|blocked|server_names] … 
默认值:no 
使用字段:server, location 
这个指令在referer头的基础上为 $invalid_referer 变量赋值,其值为0或1。
可以使用这个指令来实现防盗链功能,如果valid_referers列表中没有Referer头的值, $invalid_referer将被设置为1(参照前例)。
参数可以使如下形式:

    • none意为不存在的Referer头
    • blocked意为根据防火墙伪装Referer头,如:“Referer: XXXXXXX”。
    • server_names为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符。
  1. server {
  2. listen 80;
  3. server_name www.baidu.org;
  4. #charset koi8-r;
  5. #access_log logs/host.access.log main;
  6. location / {
  7. root /www/baidu.org/;
  8. index index.html index.htm;
  9. }
  10.  
  11. ############################################################### 如下:防盗链
  12. location ~* \.(jpg|png|gif|jpeg)$ {
  13. root /www/baidu.org;
  14. valid_referers none blocked www.baidu.org *.baidu.org;
  15. if ($invalid_referer) {
  16. rewrite ^/ http://www.baidu.org/403.html; # 如果有盗链的情况就使用url重写到错我页面
  17. }
  18. }
    }
  1. [root@node5 nginx]# cd /www/baidu.org/
  2. [root@node5 baidu.org]# pwd
  3. /www/baidu.org
  4. [root@node5 baidu.org]# cat index.html
  5. www.baidu.org
  6. <img src="http://172.16.249.27/images/1.jpg">
  7. #####################自己域内中的服务器使用####################

nginx apache防盗链的更多相关文章

  1. apache 防盗链

    方法1:Apache防盗链的第一种实现方法,可以用rewrite实现 (1.)首先要确认Apache的rewrite module可用,打开 httpd.conf 文件,如果前面有注释去掉 LoadM ...

  2. Nginx图片防盗链【实战】

    访问我的博客 前言 博主目前在一家原创小说网站公司工作,由于站内的作品全部是原创,于是乎不可避免地会被一些盗版网站爬取盗版,对于防盗版一直没有很好的对策,让公司很是苦恼. 最近去一些盗版网站上搜索我们 ...

  3. Nginx中防盗链(下载防盗链和图片防盗链)操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  4. Nginx中防盗链(下载防盗链和图片防盗链)及图片访问地址操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  5. 完美的nginx图片防盗链设置详解

    一般,我们做好防盗链之后其他网站盗链的本站图片就会全部失效无法显示,但是您如果通过浏览器直接输入图片地址,仍然会显示图片,仍然可以右键图片另存为下载文件!依然可以下载?这样就不是彻底的防盗链了! [r ...

  6. nginx 有关防盗链的设置

    http://blog.csdn.net/longjef/article/details/53284108 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链 ...

  7. nginx作防盗链设置

    盗链是一种损害原有网站合法权益,给原网站所在服务器造成额外负担的非法行为. 盗链的实现原理: 客户端向服务器请求资源时,为了减少网络带宽,提高响应时间,服务器一般不会一次将所有资源完整地传回给客户端. ...

  8. NGINX 如何防盗链

    一.安装Nginx: 1.解决依赖关系 # yum groupinstall "Development Tools" "Server Platform Deveopmen ...

  9. Nginx下载防盗链(迅雷等下载软件)

    什么是下载盗链   假设我们是一个B站,有些视频资源是可以提供给用户下载的.这时迅雷等其他下载软件,也提供下载该视频的服务, 但是迅雷很不厚道的,将我们的下载资源提供给他的用户,下载.占用我们的带宽来 ...

随机推荐

  1. 【转】tomcat与apache,tomcat与servlet的区别

    tomcat与apache的区别:(转自:http://blog.csdn.net/longzs/article/details/10959945) 1.apache支持静态页,tomcat支持动态的 ...

  2. java-dispose方法

    今天在编一道JAVA例题时,看到 dispose 这个方法,在程序中是用来关闭一个GUI页面的.这也让我想到了setVisible(false)方法.在网上查了意思,dispose()即释放所有本机屏 ...

  3. table中填写数据并批量增加

    <table class = "table jtable table-bordered table-striped hide" id = "table_1" ...

  4. 错误:支持“EFDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId

    支持"EFDbContext"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/ ...

  5. POJ 3255:Roadblocks(次短路)

    题目大意:求无向图的次短路. 分析: 在起点终点各求一次最短路,枚举边,通过该边的最短路为其权值加上到起点和终点最短路之和,找到最短但又比最短路长的路径. 代码: program block; typ ...

  6. 【bzoj2721】[Violet 5]樱花 数论

    题目描述 输入 输出 样例输入 2 样例输出 3 题解 数论 设1/x+1/y=1/m,那么xm+ym=xy,所以xy-xm-ym+m^2=m^2,所以(x-m)(y-m)=m^2. 所以解的数量就是 ...

  7. 外星千足虫(bzoj 1923)

    Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 包含一个“01”串和一个数字,用一个空格隔开.“01 ...

  8. Berkeley DB Java Edition 简介

    一.             简介        Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据. l         能够高效率的 ...

  9. shell 执行提示No such file or directory

    问题描述: 项目开发过程中ansible执行脚本失败,单独运行shell脚本提示:No such file or directory,脚本结构执行脚本a 调用另一脚本b, 但查看b脚本路径正确不存在找 ...

  10. hdu 1690(Floyed)

    Bus System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...