Apache配置防盗链

有时候,你的网站莫名其妙的访问量变大,不要高兴的太早,有可能是被别人盗链了。

举个例子:比如你搭了个discuz论坛,里面有些热点图片、视频;然后别人将他网站上访问图片的地址重定向到你的discuz上,这样他的服务器就可以空闲出来了;也就是说别人访问他网站的图片视频,消耗的确是你服务器的资源;

解决这个问题的方法是配置下防盗链,让外来的盗不了链;

方法1:Apache 防盗链的第一种实现方法,可以用rewrite实现。

首先要确认 Apache 的rewrite module可用:

[root@www~]# apachectl -M | grep rewrite

rewrite_module (shared)

打开 httpd.conf,确保有这么一行配置:

LoadModule rewrite_modulemodules/mod_rewrite.so

然后在找到自己网站对应的配置的地方(如在主配置文件中或虚拟主机中),加入下列代码:

ServerName www.benet.com

#防盗链配置

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !benet\.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !www\.benet\.com/.*$ [NC]

RewriteRule.*\.(gif|jpg|swf)$http://www.benet.com/about/p_w_picpath.png [R,NC,L]

注:相关选项的解释

1.RewriteEngineOn #启用rewrite,要想rewrite起作用,必须要写上

2.%{HTTP_REFERER}:服务器变量,HTTPReferer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

3.[ NC]指的是不区分大小写,[R]强制重定向 redirect

4.字母L表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则

注:相关配置的解释

1.RewriteCond %{HTTP_REFERER}!^$ 上面这一行意在允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。

2.RewriteCond %{HTTP_REFERER} !benet\.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !www\.benet\.com/.*$ [NC]

设置允许访问的HTTP来源,包括网站自身。

3.RewriteRule .*\.(gif|jpg|swf)$http://www.benet.com/about/p_w_picpath.png[R,NC,L]

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

注:[F] (强制URL为被禁止的 forbidden),强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)。

注意:测试时要清除济浏览器缓存

方法2:通过判断浏览器头信息来阻止某些请求,即利用SetEnvIfNoCase和access

这个方法可以通过阻止某些机器人或蜘蛛爬虫抓取你的网站来节省你的带宽流量。

语法: SetEnvIfNoCaseattribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...

SetEnvIfNoCase当满足某个条件时,为变量赋值,即根据客户端请求属性设置环境变量。

注:Referer :指明了请求当前资源原始资源的URL,使用referer是可以防盗链

然后在找到自己网站对应的配置的地方(如在主配置文件中或虚拟主机中),加入下列代码:

SetEnvIfNoCase Referer "^$"local_ref

SetEnvIfNoCase Referer "www.benet.com/.*$"local_ref

SetEnvIfNoCase Referer "benet.com/.*$"local_ref

<filesmatch "\.(mp3|mp4|zip|rar|jpg|gif)">

Require all denied

Require env local_ref

</filesmatch>