还支持require条件容器,包括< RequireAll >、< RequireAny >和< RequireNone >,当require指令没有写在任何Require容器中时,它们隐式包含在一个< RequireAny >容器中。
< RequireAll >:其内封装的Require指令必须全都不能失败,且至少有一个成功时,该容器成功。如果其内所有指令既不成功又不失败,则该容器中立。其余所有情况都会导致该容器失败。
< RequireAny >:其内封装的Require指令只要有一个成功,该容器就成功。如果其内所有指令既不成功又不失败,则该容器中立。其余所有情况(即全部失败时)都会导致该容器失败。
< RequireNone >:其内封装的Require指令只要有一个成功时该容器就失败,否则就中立。
1.4 web身份认证示例以最常见的Basic认证方式为例。支持基于用户的认证和基于组的认证。
1.4.1 基于用户的认证先创建一个web用户及其密码列表文件。其内有4个用户:Jim、Bob、Alice和Tom。
[root@linuxidc ~]# htpasswd -cb /usr/local/apache/a_com.pass Jim 123456 [root@linuxidc ~]# htpasswd -b /usr/local/apache/a_com.pass Bob 123456 [root@linuxidc ~]# htpasswd -b /usr/local/apache/a_com.pass Alice 123456 [root@linuxidc ~]# htpasswd -b /usr/local/apache/a_com.pass Tom 123456修改httpd配置文件,假设只有中的a.com目录才需要认证且只有Jim和Bob可以认证,而其他目录以及不需要认证,其他用户认证不通过。
<VirtualHost 192.168.100.14:80> ServerName DocumentRoot /usr/local/apache/htdocs/a.com <Directory /usr/local/apache/htdocs/a.com> AllowOverride Authconfig AuthType Basic AuthName "please enter your name & passwd" AuthUserFile a_com.pass Require user Jim Bob </Directory> </VirtualHost> <VirtualHost 192.168.100.14:80> ServerName DocumentRoot /usr/local/apache/htdocs/b.com </VirtualHost>此处AuthUserFile使用的相对路径,所以该文件必须放在ServerRoot(我的测试环境ServerRoot为/usr/local/apache)下。且Require user行可以替换为"Require valid-user"表示a_com.pass中的所有用户都允许认证。
然后重启httpd,并修改客户端hosts文件。
192.168.100.14 www.b.com再测试访问。
1.4.2 基于组的认证基于组的认证只需创建一个组文件,文件中包含的是组名和组中用户成员。
例如,将Tom和Alice加入到allow组,使它们也可以访问a.com目录。
[root@linuxidc ~]# echo 'allow:Tom Alice' >/usr/local/apache/auth_group修改配置文件,例如:
<VirtualHost 192.168.100.14:80> ServerName DocumentRoot /usr/local/apache/htdocs/a.com <Directory /usr/local/apache/htdocs/a.com> AllowOverride Authconfig AuthType Basic AuthName "please enter your name & passwd" AuthUserFile a_com.pass AuthGroupFile auth_group Require user Jim Bob Require group allow </Directory> </VirtualHost> <VirtualHost 192.168.100.14:80> ServerName DocumentRoot /usr/local/apache/htdocs/b.com </VirtualHost>再重启进行测试。