网站地图 | RSS订阅 | 登陆 李洁博客 - 趁年轻,努力吧!
你的位置:首页 » Linux学习 » 正文

LInux/Win平台防盗链设置指南(Nginx+Apache+IIS)

2015-9-4 17:45:51 | 作者:Asian Data Center | 4个评论 | 人浏览

防盗链原理

通过HTTP协议中Referer表头字段(Referer为Header的一部分,服务器籍此可以获得一些信息用于相关处理.)网站检测目标网页访问的来源页面如果是资源文件,则可以跟踪到显示它的页面地址,检测到非本站来源时即进行阻止或者定向到指定的页面.

一. Linux下Nginx防盗链的配置

方法1.Nginx针对文件类型的防盗链配置

location ~ .*\.(gif|jpg|jpeg|png|swf|zip|rar|gz|7z)$ {

valid_referers none blocked *.asiaidc.net asiaidc.net;

if ($invalid_referer) {

rewrite ^/ http://bbs.asiaidc.net/error/Hotlink.png;

#return 403;

}

}  

这种方法是在server或者location段中加入valid_referers none blocked,其中:

  1. (gif|jpg|jpeg|png|swf|zip|rar|gz|7z)表示对上述相关后缀的文件实施防盗链;

  2. none表示空的来路即直接访问资源地址,如直接在浏览器中输入URL访问;

  3. blocked则表示被防火墙标记过的来路;

  4. *.asiaidc.net asiaidc.net表示过滤主域和其下所有子域名站点;

  5. if{...}表示如果来路非以上指定来路就定向到403错误页面或指定图片等.

方法2.Nginx针对文件目录的防盗链配置

location /img/ {

root /www/img/;

valid_referers none blocked *.asiaidc.net asiaidc.net;

if ($invalid_referer) {

rewrite ^/ http://bbs.asiaidc.net/error/Hotlink.png;

#return 403;

}

}

方法3.使用第三方模块NGX_HTTP_ACCESSKEY_MODULE实现Nginx终极防盗链

方法如下:

  1. 下载NginxHttpAccessKeyModule模块文件: http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz;

  2. 解压此文件后找到Nginx-accesskey-2.0.3下的config文件.编辑此文件,替换其中的"$HTTP_ACCESSKEY_MODULE"为"NGX_HTTP_ACCESSKEY_MODULE";

  3. 使用以下参数重新编译Nginx

./configure --add-module=path/to/nginx-accesskey

<<pestd add

上面加上原有到编译参数,最后执行:

make && make install

修改Nginx的conf文件,添加以下内容

location /download {

accesskey on;

accesskey_hashmethod md5;

accesskey_arg "key";

accesskey_signature "mypass$remote_addr";

}

其中:

  1. accesskey为模块开关;

  2. accesskey_hashmethod为加密方式MD5或者SHA-1;

  3. accesskey_arg为URL中的关键字参数;

  4. accesskey_signature为加密值,此处为mypass和访问IP构成的字符串.

访问测试脚本download.php

<?

$ipkey= md5("mypass".$_SERVER['REMOTE_ADDR']);

$output_add_key="<a href=http://bbs.asiaidc.net/download/file.rar?key=".$ipkey.">download_key</a><br />";

$output_org_url="<a href=http://bbs.asiaidc.net/download/file.rar>download_path</a><br />";

echo $output_add_key;

echo $output_org_url;

?>

访问第一个download_key链接可以正常下载,第二个链接download_path则会返回403 Forbidden错误.

技术原理为:假如download目录下有一个名为file.zip的文件,对应的链接URI为http://bbs.asiaidc.net/download/file.zip;使用NginxHttpAccessKeyModule模块后"http://bbs.asiaidc.net/download/file.zip?key=195965e7c290" 只有给定正确的key值才能够下载download目录下的file.zip文件.而此key值是和访问用户的IP相关的,这样一来就实现了Nginx的终极防盗链目标,目前可以达到防止迅雷盗链的级别,有兴趣的童鞋可以测试一下.

以上各种方法修改Nginx的conf文件后需重启Nginx服务

sudo /usr/sbin/nginx -t #测试配置

sudo service nginx restart #重启Nginx服务

二.Linux下Apache防盗链配置

1.Apache httpd.conf防盗链设置(独立服务器&有控制权限)

此方法使用Rewrite实现.确认Apache的mod_rewrite模块可用,修改Apache httpd.conf配置文件,编辑httpd.conf,编辑或添加如下代码

Options FollowSymLinks

AllowOverride All  #将None修改为All

LoadModule rewrite_module modules/mod_rewrite.so  #加载mod_rewrite模块

然后在相应虚拟主机配置中加入如下防盗链配置参数

<Files .htaccess>

order allow,deny

deny from all

</Files>

#禁止.htaccess文件被查看

ServerName bbs.asiaidc.net

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://asiaidc.net/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://asiaidc.net$ [NC]

RewriteCond %{HTTP_REFERER} !^http://www.asiaidc.net/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://www.asiaidc.net$ [NC]

RewriteRule .*\.(gif|jpg|jpeg|png|swf|zip|rar|gz|7z)$ http://bbs.asiaidc.net/error/Hotlink.png [R,NC]

  1. asiaidc.net/.* www.asiaidc.net ... 表示自己受信任的站点或目录;

  2. (gif|jpg|jpeg|png|swf|zip|rar|gz|7z)表示受保护文件扩展名;

  3. Hotlink.png盗链后的重定向页面/提示图片.

2.Apache .htaccess防盗链设置(虚拟主机&无系统控制权限)

所用虚拟主机支持 .htaccess(分布式配置文件),将以下配置内容写入 .htaccess文件中并放入根目录或相应资源目录下即可.

ServerName bbs.asiaidc.net

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://asiaidc.net/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://asiaidc.net$ [NC]

RewriteCond %{HTTP_REFERER} !^http://www.asiaidc.net/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://www.asiaidc.net$ [NC]

RewriteRule .*\.(gif|jpg|jpeg|png|swf|zip|rar|gz|7z)$ http://bbs.asiaidc.net/error/Hotlink.png [R,NC]

以上配置通过判断Referer变量的值从而判断图片或资源的引用是否为合法,只有在设定范围内的Referer,才能访问到指定资源,从而实现防盗链的目的.以上方法同样需要重启Apache服务.

sudo service httpd restart

sudo /etc/init.d/apache2 restart  #视发行版环境不同重启命令可能有所不同.

三.Win下Apache防盗链配置

  1. Win下服务器支持 .htaccess文件的话(Win+Apache)可参考上文Apache .htaccess防盗链设置内容.

四.Win下防盗链设置(使用IIS REWRITE模块)

  1. 下载微软官方IIS REWRITE模块 https://www.microsoft.com/zh-cn/download/details.aspx?id=7435

  2. 修改网站的web.config文件,添加如下内容

<system.webServer>

<rewrite>

<rules>

<rule name="Prevent hotlinking">

<match url="^.*\.(gif|jpg|jpeg|png|swf|zip|rar|gz|7z)$" ignoreCase="true" />

<conditions>

<add input="{HTTP_REFERER}" pattern="http://bbs.asiaidc.net/.*" negate="true" />

<add input="{HTTP_REFERER}" pattern="http://asiaidc.net/.*" negate="true" />

</conditions>

<action type="Rewrite" url="http://bbs.asiaidc.net/error/Hotlink.png" />

</rule>

</rules>

</rewrite>

</system.webServer>

以上设置了只允许bbs.asiaidc.net/.*和asiaidc.net/.*调用网站的(gif|jpg|jpeg|png|swf|zip|rar|gz|7z)类型的文件.将以上文件上传至网站wwwroot根目录下即可,如果站点已经设置好伪静态(已使用IIS REWRITE模块),可直接将上述代码加入原有web.config配置文件即可生效.

五.Win下防盗链设置(使用httpd.ini实现防盗链)

httpd.ini为IIS的配置文件,相对于.htaccess文件功能没有那么强大和规则上的丰富.如果空间支持httpd.ini功能的话,我们还可以用此来实现站点资源防盗链的功能,方法大致如下

新建或编辑httpd.ini文件,在此添加如下内容

[ISAPI_Rewrite]   

CacheClockRate 3600  

RepeatLimit 32  

#已开启伪静态可删除以上三行代码   

#防盗链设置   

RewriteCond Host: (.+)   

RewriteCond Referer: (?!http://(?:asiaidc\.net|(.*)\.asiaidc\.net)).*   

RewriteRule .*\.(?:gif|jpg|jpeg|png|swf|zip|rar|gz|7z) /Hotlink.png [I,O,N]  

其中:

  1. RewriteCond Referer: 允许使用资源的站点,使用"|"相隔;

  2. (?:gif|jpg|jpeg|png|swf|zip|rar|gz|7z) 受保护文件的扩展名,同样使用"|"相隔;

  3. /Hotlink.png盗链时指向的提示图片地址,末尾参数N表示重新从站点请求文件而非本地缓存读取,可避免由盗链页面至访问本站页面时,被盗链图片的缓存影响图片的正常显示.

编辑并保存后,将httpd.ini和Hotlink.png上传至站点根目录即可.


Respect for the original creation of the hard, the author of : 勇敢的心  In this thanks!

 

  • 本文来自:李洁博客,转载请保留出处!欢迎发表您的评论
  • 相关标签:Linux  Win  防盗链  设置指南  
  • 已有4位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    选填

    记住我,下次回复时不用重新输入个人信息

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。