防盗链能限制不认识的referer的访问,可以禁止别人的服务器引用或转发我服务器上的内容,这样能够防止别人盗用我服务器上的资源,服务器的资源被盗用会致使网络带宽的使用量上升。php
1.配置虚拟主机文件增长如下内容:html
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <Directory /data/wwwroot/111.com> SetEnvIfNoCase Referer "http://111.com" local_ref SetEnvIfNoCase Referer "http://aaa.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>
修改完以后从新加载一下配置文件:linux
[root@aming-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@aming-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK
SetEnvIfNoCase : SetEnvIf指令根据客户端的请求属性设置环境变量,SetEnvIfNoCase表明当知足某个条件时,为变量赋值,通常结合其余指令使用。apache
SetEnvIfNoCase Referer "http://111.com"; local_ref: 将知足条件的refer打上标记local_refvim
Order Allow,Denybash
Allow from env=local_ref : 这段表示除了local_ref能够同行,其他的所有禁掉服务器
2.使用curl模拟Referer进行测试网络
[root@aminglinux ~]# curl -e "http://www.qq.com/123.txt";; -x127.0.0.1:80 111.com/cc.jpg -I #模拟www.qq.com显示403 HTTP/1.1 403 Forbidden Date: Sun, 04 Mar 2018 22:09:49 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1 [root@aminglinux ~]# curl -e "http://111.com/123.txt";; -x127.0.0.1:80 111.com/cc.jpg -I #模拟成111.com成功访问 HTTP/1.1 200 OK Date: Sun, 04 Mar 2018 22:10:40 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.30 Last-Modified: Mon, 21 Aug 2017 14:32:40 GMT ETag: "54bcb-5574459d3d200" Accept-Ranges: bytes Content-Length: 347083 Content-Type: image/jpeg
使用-e选项时,域名的描述不能乱写,要以http://开头。curl
除了Directory的访问控制还有FilesMatch的访问控制,Directory访问控制相似于限制一个目录的访问,而FilesMatch访问控制则相似于限制一个文件或文件连接的访问,FilesMatch要写在Directory以内。测试
1. 编辑虚拟主机配置文件
vim /usr/local/httpd2.4/conf/extra/httpd-vhosts.conf
2. 在配置文件里添加以下段,目的是对111.com下的admin目录进行访问控制
<Directory /data/wwwroot/111.com/admin/> Order deny,allow Deny from all Allow from 127.0.0.1 = 指定某IP访问 </Directory>
Order 用来定义顺序 Order deny,allow 表示先deny 再allow
这段话表是拒绝全部的访问,仅经过127.0.0.1
3. 配置完成后须要检查配置文件以及从新加载配置文件才会生效
/usr/local/httpd2.4/bin/apachectl -t /usr/local/httpd2.4/bin/apachectl graceful
4. 使用curl进行测试是否成功
[root@aminglinux ~]# curl -x127.0.0.1:80 111.com/admin/index.php test [root@aminglinux ~]# curl -x127.0.0.1:80 111.com/admin/index.php -I #使用127.0.0.1能够正常访问, HTTP/1.1 200 OK Date: Mon, 05 Mar 2018 16:26:57 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.30 X-Powered-By: PHP/5.6.30 Content-Type: text/html; charset=UTF-8 [root@aminglinux ~]# curl -x192.168.177.7:80 111.com/admin/index.php -I #使用192.168.177.7访问失败提示403 Forbidden HTTP/1.1 403 Forbidden Date: Mon, 05 Mar 2018 16:27:42 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1
1.对111.com下的admin.php开头页面进行访问控制,一样在虚拟主机配置文件上添加以下段:
<Directory /data/wwwroot/111.com> <FilesMatch "admin.php(.*)"> Order deny,allow Deny from all Allow from 127.0.0.1 </FilesMatch> </Directory>
2. 使用curl进行测试是否成功
[root@aminglinux ~]# curl -x192.168.177.7:80 111.com/admin.php?=1=2 -I # 显示403 Forbidden 不容许访问 404表示容许访问 HTTP/1.1 403 Forbidden Date: Mon, 05 Mar 2018 19:23:54 GMT Server: Apache/2.4.29 (Unix) PHP/5.6.30 Content-Type: text/html; charset=iso-8859-1
扩展
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定义header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556