[root@CentOS6 conf.d]# cat isolinux.conf
<Directory "/var/www/html/isolinux">
AuthType Basic # Basic表示明文
AuthName "isolinux"
AuthUserFile "/etc/httpd/conf.d/.htuser" # 存放用户和密码的文件
Require User Bob # 表示只有后边指定的用户才可以登录,Valid-User表示只要输入密码正确就可以登录
</Directory>
# htpasswd命令创建两个用户Bob Alice
[root@CentOS6 conf.d]# htpasswd -cm /etc/httpd/conf.d/.htuser Bob # -c表示首次创建的时候指定的用户文件,-m 表示MD5加密
New password:
Re-type new password:
Adding password for user Bob
[root@CentOS6 conf.d]# htpasswd -m /etc/httpd/conf.d/.htuser Alice # 第二次创建用户的时候不需要加-c,否则会覆盖文件中的其他用户
New password:
Re-type new password:
Adding password for user Alice
[root@CentOS6 conf.d]# cat .htuser
Bob:$apr1$QO7u9/CG$tWj182TGwOBXg6.EIi36/1
Alice:$apr1$DPDl0yte$a7jtviDXWzpnfEped6VYh1
然后重启httpd,会出现如下效果,当输入指定的用户Bob和密码的时候,才能够进入isolinux目录
下面的是基于用户组认证的访问控制
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat isolinux.conf
<Directory "/var/www/html/isolinux">
AuthType Basic
AuthName "isolinux"
AuthUserFile "/etc/httpd/conf.d/.htuser"
AuthGroupFile "/etc/httpd/conf.d/.htgroup" # 新增加的组文件
Require Group group1
</Directory>
[root@CentOS6 conf.d]# cat .htgroup # 将Bob和Alice加入组
group1:Bob Alice
重启服务之后,只要是组里边的用户都可以登录isolinux目录,同时Alice也可以(上个例子中的Alice是不可以登录)。
基于客户端IP和用户(组)的双重认证,需要借助选项Satisfy,
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat isolinux.conf
<Directory "/var/www/html/isolinux">
Order Deny,Allow
deny from all
allow from 172.18.251.124 # 只允许172.18.251.124的IP能够登录该isolinux目录
AuthType Basic
AuthName "isolinux"
AuthUserFile "/etc/httpd/conf.d/.htuser"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"
Require Group group1 # 保持上边的例子不变,仍然为Bob Alice
Satisfy Any # Any表示只要符合其中一项即可,All表示必须同时满足IP和用户(组)才能登录
</Directory>
如下图所示,访问(服务端IP)172.18.250.183/isolinux,因为客户端IP满足要求,因此就不需要通过用户认证。满足其一即可。
八、虚拟主机的实现
虚拟主机的实现有三种实现方案,分别为
基于IP:每个虚拟主机至少一个IP
基于Port:每个虚拟主机至少一个独立的Port
基于域名:每个虚拟主机至少一个域名
8.1 基于IP的虚拟主机
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat virtualhost.conf
<VirtualHost 192.168.124.1:80> # 124.1和138.254是同一主机上的两个IP
DocumentRoot/var/www/html
<Directory "/var/www/html"> # 因为/var/www/html目录下添加默认的首页,所有设置了Options Indexes指令。
Options Indexes
</Directory>
</VirtualHost>
<VirtualHost 192.168.138.254:80>
DocumentRoot/var/www/error
<Directory "/var/www/error">
Options Indexes
</Directory>
</VirtualHost>
[root@CentOS6 www]# pwd
/var/www
[root@CentOS6 www]# ls
cgi-bin error html icons manual
# 然后重启服务
8.2 基于Port的虚拟主机
这种方法是基于一个ip上绑定多端口来实现的
[root@CentOS6 conf.d]# cat virtualhost.conf
Listen 192.168.138.254:8090 # 设置监听的端口号
Listen 192.168.138.254:8080
<VirtualHost 192.168.138.254:8090>
DocumentRoot/var/www/html
<Directory "/var/www/html">
Options Indexes
</Directory>
</VirtualHost>
<VirtualHost 192.168.138.254:8080>
DocumentRoot/var/www/error
<Directory "/var/www/error">
Options Indexes
</Directory>
</VirtualHost>
可以看到同一IP的不同端口,访问的资源不同
小tips:设置好基于port的虚拟主机后,重启httpd会失败,错误信息如下
(13)Permission denied: make_sock: could not bind to address 192.168.138.254:8090
no listening sockets available, shutting down
able to open logs
这是由于SELinux的缘故,需要关闭SELinux,httpd就可以正常启动了。
/etc/httpd/conf.d/welcome.conf
8.3 基于域名的虚拟主机
一个IP上对应多个域名,不同的域名对应各自的站点,先来配置httpd的配置文件,对应/var/www/html目录,对应/var/www/error目录,