首先来了解一下什么是盗链,全称是盗取连接,假如咱们的网站有不少好看的图片,别人能够查看咱们网站图片的连接,而后应用在他的网站上,这样的话,去访问他的网站,实际上消耗的是咱们的流量(由于实际连接在咱们这里),这样咱们就不得不去配置防盗链,使得别人不能复制咱们图片的连接。php
一、编辑虚拟主机配置文件apache
# vim /usr/local/apache2.4/conf/extra/httpd-vhost.confvim
在文件中加入如下内容:浏览器
<Directory /data/wwwroot/111.com>服务器
SetEnvIfNoCase Referer "http://www.111.com" local_refcurl
SetEnvIfNoCase Referer "http://111.com" local_ref测试
SetEnvIfNoCase Referer "^$" local_ref网站
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">url
Order Allow.Denyspa
Allow from env=local_ref
</filesmatch>
</Directory>
其中 SetEnvIfNoCase Referer的三行内容是设置白名单
txt|doc|mp3|zip|rar|jpg|gif|png 表示防盗链防盗的对象,设置后,这些类型的文件就不能被白名单外的第三方引用
Order用于定义顺序,是先容许仍是先拒绝
二、验证
首先将配置文件中的空referer一行隐藏
而后开启apache服务
# /usr/loacl/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl start
这时咱们在浏览器输入111.com/hw.jpg来访问服务器上hw.jpg这张图片时,出现以下提示
可是若是在白名单的网站上咱们发一个帖子,在帖子中加入111.com/hw.jpg这个连接,经过帖子连接跳转又能正常访问
如今咱们将配置文件中的空referer一行的#号去掉,从新加载配置文件后,咱们再在浏览器输入111.com/hw.jpg来访问服务器上hw.jpg这张图片时,就能正常访问了
以上实验能够看出:"^$"空的referer指的是从浏览器输入图片地址直接访问,没有跳转连接,
咱们再来经过curl作实验,当前空referer行未被隐藏
先直接访问,空referer状态,结果访问成功:
再来模拟一个不在白名单中的referer访问图片,结果被拒绝访问:
只容许白名单内的IP访问指定的目录
一、修改配置文件
配置文件中加入如下内容:
<Directory /data/wwwroot/111.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
以上Order用于定义顺序,是先执行deny仍是先执行allow,若是Order后先是allow那么就会先执行allow的语句,若是先是deny,就会先执行deny的语句,它有一个特色是:不管是否匹配到指定的IP,都会从头到尾将语句执行完;admin/为指定的访问控制的目录
建立访问控制目录及子文件
二、从新加载配置文件
# /usr/local/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl graceful
三、测试访问控制
# curl -x127.0.0.1:80 111.com/admin/index.php -I //此处指定了目标IP,未指定源IP,默认源访问IP同目标IP一致;源IP在配置文件的白名单内,访问200 OK
# curl -x192.168.31.157:80 111.com/admin/index.php -I //此处指定了目标IP,未指定源IP,默认源访问IP同目标IP一致,源IP不在配置文件的白名单内,访问403 Forbidden
咱们来查看访问日志记录
# tail /usr/local/apache2.4/logs/111.com-access_log
再来测试经过物理机访问虚拟机
在浏览器输入111.com/admin/index.com结果也提示被禁止访问
只有指定的IP才能访问匹配的文件或者说是连接
一、编辑配置文件
在配置文件中加入如下内容
<Directory /data/wwwroot/111.com/>
<filesmatch admin.php(.*)>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</filesmatch>
</Directory>
以上表示匹配admin.php(.*)文件或连接只有指定的IP能访问
二、从新加载配置文件
# /usr/local/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl graceful
三、测试验证
# curl -x192.168.31.157:80 111.com/sfdfsfs -I //如下结果表示找不到这个页面
# curl -x192.168.31.157:80 111.com/admin.php?sfdfsfs -I //如下结果表示不容许源IP访问
# curl -x127.0.0.1:80 111.com/admin.php?dfdfdfdfdfd -I //如下结果表示已经容许的源IP的访问,只是找不到对应的页面
推荐连接
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定义header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556