要实现防盗链,咱们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议提及,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿连接到当前的网页或文件。换句话说,经过referer,网站能够检测目标网页访问的来源网页,若是是资源文件,则能够跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就能够经过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。html
(1)配置防盗链apache
[root@chy ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf (增长以下配置) <Directory /data/wwwroot/111.com> SetEnvIfNoCase Referer "http://www.111.com" local_ref SetEnvIfNoCase Referer "http://123.com" local_ref SetEnvIfNoCase Referer "^$" local_ref <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)"> Order Allow,Deny Allow from env=local_ref </filesmatch> </Directory> 配置详解:<Directory /data/wwwroot/111.com> (定义网站的目录) SetEnvIfNoCase Referer "http://www.111.com" local_ref (定义referer的白名单) SetEnvIfNoCase Referer "http://123.com" local_ref(定义refererd的白名单) SetEnvIfNoCase Referer "^$" local_ref(定义空的referer为白名单) <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">(定义规则,针对这样的访问作一个白名单) Order Allow,Deny Allow from env=local_ref </filesmatch>(这里的含义为将白名单referer容许,其它的规则deny) </Directory> [root@chy ~]# /usr/local/apache2.4/bin/apachectl graceful (加载配置) [root@chy ~]# curl -x127.0.0.1:80 www.111.com/lf.png -I HTTP/1.1 403 Forbidden Date: Thu, 03 Aug 2017 00:56:11 GMT Server: Apache/2.4.27 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1 (测试作防盗链的结果) [root@chy 111.com]# curl -x127.0.0.1:80 www.111.com/lf.png -I HTTP/1.1 200 OK Date: Thu, 03 Aug 2017 00:00:31 GMT Server: Apache/2.4.27 (Unix) PHP/5.6.30 Last-Modified: Wed, 19 Oct 2016 08:52:35 GMT ETag: "1bca7-53f33ee277ac0" Accept-Ranges: bytes Content-Length: 113831 Cache-Control: max-age=86400 Expires: Fri, 04 Aug 2017 00:00:31 GMT Content-Type: image/png (这个是以前测试没有作防盗链的结果)