11.25 配置防盗链
11.26 访问控制Directory(针对一个目录做限制)
11.27 访问控制FilesMatch(针对一个文件或链接做限制)
扩展
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定义header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556
11.25 配置防盗链
设置防盗链,不是我认识的就不允许你访问。比如,A的图片上传到B,在B里面去引用,造成B的带宽升高,这是不允许的。只能在A域名里去访问,这样图片就能控制在我们自己的服务器上,第三方的站点没有办法去引用,这个就叫防盗链
通过限制referer来实现防盗链的功能
Apache的虚拟配置文件,配置文件增加如下内容
<Directory /data/wwwroot/111.com> 用到了Directory。定义哪个目录,也就是本站点
SetEnvIfNoCase Referer "http://111.com" local_ref 定义referer的白名单
SetEnvIfNoCase Referer "http://aaa.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref 空的referer也设为白名单。
注释掉的话,直接访问网址不显示(Forbidden),也就是没有索引页不能直接访问
<FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)"> FM不严格区分大小写,都可以。定义规则,针对这样的去做白名单,也就是做防盗链
Order Allow,Deny 顺序,先允许还是先拒绝
Allow from env=local_ref 把上面的两个把名单做一个允许,其他的deny掉
</FilesMatch>
</Directory>
-t gaceful
curl -e "http://www.aminglinux.com/123.html" 自定义referer
实例:
[root@localhost ~]# 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>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName www.111.com
ServerAlias 111.com
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
SetEnvIf Request_URI ".*\.jpg$" img
SetEnvIf Request_URI ".*\.png$" img
SetEnvIf Request_URI ".*\.bmp$" img
SetEnvIf Request_URI ".*\.swf$" img
SetEnvIf Request_URI ".*\.js$" img
SetEnvIf Request_URI ".*\.css$" img
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
<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>
</VirtualHost>
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
httpd not running, trying to start
浏览器上测试 111.com/abc.jpg 为Forbidden(即空referer) 也就是我们需要把链接的那个站址放到referer的白名单里去或设置空referer可访问
curl -e "http://www.aminglinux.com/123.html 报错原因不明
----------------------------------------------------------------------------------------------------------------------------------------------------
11.26 访问控制Directory(针对一个目录做限制):
只允许这个使用这个ip的用户才能访问(为一个目录)
核心配置文件内容
<Directory /data/wwwroot/111.com/admin/>
Order deny,allow Order指定顺序,是先deny还是allow,和下面两行是对应的
Deny from all
Allow from 127.0.0.1
</Directory>
curl测试状态码为403则被限制访问了
-t grace
也就是做了这个操作,只有在这个ip127.0.0.1的ip上访问,才可以200
实例:1 增加以下文件
<Directory /data/wwwroot/111.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
echo "admin" > /data/wwwroot/111.com/admin/index.html
> /usr/local/apache2.4/logs/111.com-access_20170719.log
[root@localhost ~]# curl -x192.168.30.133:80 111.com/admin/index.html -I
HTTP/1.1 403 Forbidden
Date: Fri, 19 Jul 2019 08:31:27 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1
[root@localhost ~]# curl -x127.0.0.1:80 111.com/admin/index.html -I
HTTP/1.1 200 OK
Date: Fri, 19 Jul 2019 08:34:19 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.32
Last-Modified: Fri, 19 Jul 2019 08:29:18 GMT
ETag: "6-58e0485c5b1b2"
Accept-Ranges: bytes
Content-Length: 6
Cache-Control: max-age=0
Expires: Fri, 19 Jul 2019 08:34:19 GMT
Content-Type: text/html
实例:2
[root@localhost admin]# vi 123.php
<Directory /data/wwwroot/111.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
[root@localhost admin]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost admin]# /usr/local/apache2.4/bin/apachectl graceful
[root@localhost admin]# curl -x192.168.30.133:80 111.com/admin/123.php -I
HTTP/1.1 403 Forbidden 显示为200原因不明
[root@localhost admin]# curl -x127.0.0.1:80 111.com/admin/123.php -I
HTTP/1.1 200 OK
Date: Fri, 19 Jul 2019 08:09:51 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Cache-Control: max-age=0
Expires: Fri, 19 Jul 2019 08:09:51 GMT
Content-Type: text/html; charset=UTF-8
----------------------------------------------------------------------------------------------------------------------------------------------------
11.27 访问控制FilesMatch(针对一个文件或链接做限制):
核心配置文件内容
<Directory /data/wwwroot/111.com>
<FilesMatch "admin.php(.*)"> 以上面的directory的基础上。在下面加一行。意思为admin.php......(什么什么的)
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch> 接上面的FilesMatch,都是成对出现的
</Directory>
实例:
[root@localhost admin]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<FilesMatch "admin.php(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
[root@localhost admin]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost admin]# /usr/local/apache2.4/bin/apachectl graceful
[root@localhost admin]# curl -x127.0.0.1:80 'http://111.com/admin/admin.phpaew?' -I 有特殊符号要用单引号
HTTP/1.1 404 Not Found
Date: Fri, 19 Jul 2019 08:53:34 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1
代表页面不存在,其实是已经访问了,只是我们没有创建这个admin.phpaew?
[root@localhost admin]# curl -x192.168.30.133:80 'http://111.com/admin/admin.phpaew?' -I
HTTP/1.1 403 Forbidden
Date: Fri, 19 Jul 2019 08:54:16 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1