访问控制

Apache实现访问控制的配置指令包括如下三种:(1)order指令:用于指定执行允许访问控制规则或者拒绝访问控制规则的顺序。order只能设置为Order allow,deny或Order deny,allow,分别用来表明用户先设置允许的访问地址还是先设置禁止访问的地址。Order选项用于定义缺省的访问权限与Allow和Deny语句的处理顺序。Allow和Deny语句可以针对客户机的域名或IP地址进行设置,以决定哪些客户机能够访问服务器。Order语句设置的两种值的具体含义如下:

◆allow, deny:缺省禁止所有客户机的访问,且Allow语句在Deny语句之前被匹配。如果某条件既匹配Deny语句又匹配Allow语句,则Deny语句会起作用(因为Deny语句覆盖了Allow语句)。

◆deny, allow:缺省允许所有客户机的访问,且Deny语句在Allow语句之前被匹配。如果某条件既匹配Deny语句又匹配Allow语句,则Allow语句会起作用(因为Allow语句覆盖了Deny语句)。

(2)allow指令:指明允许访问的地址或地址序列。如allow from all指令表明允许所有IP来的访问请求。

(3)deny指令:指明禁止访问的地址或地址序列。如deny from all指令表明禁止所有IP来的访问请求。

增加访问控制配置

[root@chy ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName www.111.com
    ServerAlias www.exaple.com 222.com
    #<Directory /data/wwwroot/111.com>
     #<filesMatch 123.php>
      #AllowOverride AuthConfig 
      #AuthName "111.com user auth"
        #AuthType Basic
        #AuthUserFile /data/.htpasswd 
       #require valid-user
      #</FilesMatch>
      #</Directory>
      <Directory /data/wwwroot/www.123.com/admin/>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Directory>

    # <IfModule mod_rewrite.c> 
       # RewriteEngine on 
        #RewriteCond %{HTTP_HOST} !^111.com$  
        #RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] 
# </IfModule>
    #<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://444.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>

    ErrorLog "logs/111.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" img
    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 "logs/111.com-access_log" combined env=!img
 </VirtualHost>
(如上配置,主要的配置如下:<Directory /data/wwwroot/111.com/admin/>
        Order deny,allow(这个是按照这一行的顺序,先是deny,后是allow,最后的结果是allow。不看下面的先后顺序)
        Deny from all
        Allow from 127.0.0.1
    </Directory>
    (这个要放在防盗链的上面)
[root@chy ~]# mkdir -p /data/wwwroot/111.com/admin/
(创建一个admin目录)
[root@chy admin]# vim index.php
[root@chy admin]# cat index.php 
djaog
(在index.php里面写入内容,然后查看)
[root@chy ~]# curl -x127.0.0.1:80 www.111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Thu, 03 Aug 2017 01:23:05 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
(用curl测试,)
[root@chy ~]# curl -x127.0.0.1:80 www.111.com/admin/index.php 
djaog
[root@chy ~]# curl -x192.168.212.10:80 www.111.com/admin/index.php
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /admin/index.php
on this server.<br />
</p>
</body></html>
(用本机的ip进行测试)