Apache 、Nginx 服务资源防盗链

Web服务资源防盗链技术

确保地址正确的情况下,不能下载相应的资源,均是受到防盗链系统的影响,那么究竟什么是防盗链系统呢?防盗链自然就是防范盗链,所以这里先说一下什么是盗链。
盗链是指在自己的页面上展示一些并不在自己服务器上的内容。通常的做法是通过技术手段获得它人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。比较常见的是一些小站盗用大站的资源(图片、音乐、视频、软件等),对于这些小站来说,通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器。

如何发现盗链:

1.对IDC及CDN带宽做监控报警
2.作为高级运维或者运维经理,经常查看网站流量图,关注流量变化,关注异常流量
3.对访问日志做分析,对于异常迅速定位

轻松应对IDC机房带宽突然暴涨问题
解决:http://oldboy.blog.51cto.com/2561410/909696

防盗链解决方案原理:

1.http referer实现防盗链。在http协议中,有一个表头字段叫referer,使用URL格式来表示从哪儿里来的链接到到当前网页的资源。通过referer可以检测目标访问的来源网页。如果是资源文件,可以追踪到显示它的网页地址,一旦检测出来源不是本站进行阻止或访问指定 的页面
apache,nginx,lighttpd都支持
2.cookie

3.通过加密变换访问路径实现防盗链。lighttp有类似插件mod_secdownload

apache配置防盗链

vi httpd-vhosts.conf

1.确保apache已开启rewrite。 
2.在.htaccess文件中添加如下:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://XXX.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://XXX.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.XXX.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.XXX.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.XXX.com/nopic.png [R,NC] 

XXX表示你自已的网站域名或可以信任的站点
gif|jpg|swf 表示要包含的防止被盗链的文件的扩展名
nolink.jpg为上述扩展名的资源被盗链后的重定向页面/图片。输出警示信息,图片尽可能小
R 就是转向的意思
NC 指的是不区分大小写
L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响

1、RewriteCond %{HTTP_REFERER} !^$ [NC]
允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言,这是可选的,不过,建议这么设置,如果强迫必须具有“HTTP_REFERER”才能访问,可能会带来某些问题,比如说在用户通过代理服务器访问时。

2、RewriteCond %{HTTP_REFERER} !webeta.cn [NC]
设置允许访问的HTTP来源,包括我们的站点自身、Google、Baidu、Bloglines、Feedburner等。

3、RewriteRule .*\.(gif|jpg|png)$ http://webeta.cn/no.png [R,NC,L]
定义被盗链时替代的图片,让所有盗链 jpg、gif、png 等文件的网页,显示根目录下的 no.png 文件。注意:替换显示的图片不要放在设置防盗链的目录中,并且该图片文件体积越小越好。当然你也可以不设置替换图片,而是使用下面的语句即可:

RewriteRule .*\.(gif|jpg|png)$ - [F]

Nginx 服务实现防盗链

图片防盗链

在Nginx里面,很容易就做到防盗链的,在nginx.conf文件加入一个localtion配置项。


location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ {
    valid_referers blocked www.etiantian.com etiantian.com;
    if ($invalid_referer) {
        return 404;
    }
}

gif|jpg|jpeg|….,这些是你想要屏蔽的文件类型,可以根据情况修改。

只需要把文中 www.qixing318.com qixing318.com 修改为你允许显示你网站图片的其他网站域名,注意中间用空格分开,而不是逗号。

这样直接返回的是404页面。也可以用http://domain.com/404.jpg,显示给盗链者看到的图片,注意不要放到自己的域名上,因为放盗链的作用,那样对方是看不到的,可以上传到一些支持外联的网络相册上。

设置某个目录防盗链

只需把localtion匹配的改成一个目录就可以了,比如:
location ~ ^/images/ {
valid_referers none blocked www.etiantian.com etiantian.com;
if ($invalid_referer) {
    return 404;
}
#rewrite ^/ http://otherdomin.com/404.jpg;
}

这样就对images这个目录设置防盗链了。

NginxHttpAccessKeyModule实现防盗链介绍

Lighttpd web服务实现防盗链

在产品设计上解决放到盗链

1.添加水印
2.工作中301跳转,URL跳转运维做(产品,运营,市场),复杂的rewrite,开发做到多

猜你喜欢

转载自blog.csdn.net/shangyuanlang/article/details/77970658