在一些论坛、视频、图片等类型的网站中,有时候突然访问量变得很多,那么就有被盗链了.
如果网站的图片链接被大量引用,会大幅度消耗服务器的资源,从而使站点http查询状态为403或503,那么怎样解决这个问题呢?
这里以apache服务器为例对服务器进行简单的防盗链处理
假设站点为:xxx.zzzzz
1、Apache服务器要想实现防盗链我们可以用rewrite实现
首先要开启apache中的rewrite module模块.
[root@newweb~]# apachectl -M | grep rewrite
rewrite_module (shared)
打开httpd.conf配置文件查看是否有:
LoadModule rewrite_modulemodules/mod_rewrite.so
这一行配置,如前面有#号去掉#号.
然后在网站配置文件httpd-vhosts中
加入:
RewriteEngine On
开启重写规则,要想接下来的判断语句生效必须要加上.
然后
RewriteCond %{HTTP_REFERER} !^$
允许直接在浏览器地址栏中输入图片的链接.允许HTTP_REFERER来路为空
RewriteCond %{HTTP_REFERER} !xxx\.zzzzz/.*$ [NC]
RewriteCond %{HTTP_REFERER} !www\.xxx\.zzzzz/.*$ [NC]
.%{HTTP_REFERER}为服务器的变量,当浏览器向服务器发送请求时,会自动通过Referer告诉服务器从那个页面访问过来从而判断访问来路是否从指定网址的一级域名与二级域名中来访问的.
NC为不区分链接的大小写.
RewriteRule.*\.(gif|jpg|png)$http://www.xxx.zzzzz/error.png [R,NC,L]
如果不是则将gif、jpg、png三个类型图片引用重定向到其它错误提示图片链接.
如果不显示错误提示的图片也可以直接写,强制图片链接禁止访问
RewriteRule.*\.(gif|jpg|png)$ - [F]
示例:
<VirtualHost *:80>
DocumentRoot "C:/网站根目录"
ServerName 网站域名
ServerAlias 网站域名
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !xxx\.zzzzz/.*$ [NC]
RewriteCond %{HTTP_REFERER} !www\.xxx\.zzzzz/.*$ [NC]
RewriteRule.*\.(gif|jpg|png)$http://www.xxx.zzzzz/error.png [R,NC,L]
</VirtualHost>
2、使用SetEnvIfNoCase来判断浏览器head信息来过滤请求.
SetEnvIfNoCase Referer当满足访问条件时,为变量赋值,根据客户端请求属性设置的变量.
Referer 设置当前访问的来路地址.
同上在网站的配置加入如下代码:
SetEnvIfNoCase Referer "^$"local_ref
SetEnvIfNoCase Referer "www.xxx.zzzzz/.*$"local_ref
SetEnvIfNoCase Referer "xxx.zzzzz/.*$"local_ref
<filesmatch "\.(jpg|gif|png)">
Require all denied
Require env local_ref
</filesmatch>
当访问的来路网址为直接在浏览器输入或域名xxx.zzzzz、www.xxx.zzzzz时,filesmatch所包含的jpg、gif、png格式的图片文件禁止访问.
以上就是在apache服务器中简单的设置防盗链的两种方法.