要求:
分别使用httpd-2.2和httpd-2.4实现
1、建立httpd服务,要求:
(1) 提供两个基于名称的虚拟主机www1, www2;有单独的错误日志和访问日志;
(2) 通过www1的/server-status提供状态信息,且仅允许tom用户访问;
(3) www2不允许192.168.0.0/24网络中任意主机访问;
2、为上面的第2个虚拟主机提供https服务;
以下将会演示分别在CentOS 6和CentOS 7上搭建httpd,并实现对web的访问控制以及https,在CentOS 6上使用的是httpd2.2,CentOS 7上使用的是httpd2.4。
CentOS 6上搭建http和httpsf服务:
第一部分:搭建http服务
1、先配置好yum源,用于安装httpd2.2
]# yum install httpd -y
2、在/etc/httpd/conf.d/创建2个虚拟主机所用的文件名称分别为vhosts1.conf、vhosts2.conf
vhosts1.conf的内容为
<VirtualHost 172.16.6.6:80> ServerName www1 DocumentRoot /data/vhosts/www1 CustomLog logs/www1-access_log combined ErrorLog logs/www1-error_log </VirtualHost> vhosts2.conf的内容为 <VirtualHost 172.16.6.6:80> ServerName www2 DocumentRoot /data/vhosts/www2 CustomLog logs/www2-access_log combined ErrorLog logs/www2-error_log </VirtualHost> 3、需要将httpd的主配置文件/etc/httpd/conf/httpd.conf中的NameVirtualHost指定注释去掉,设置为 NameVirtualHost 172.16.6.6:80 否则,启动时会有警告 4、启动httpd服务 [root@localhost ~]# service httpd start Starting httpd: [ OK ]
5、由于需要在www1上能够查看httpd的状态,所以需要httpd支持status_module模块,查看当前是否有支持的模块:
[root@localhost ~]# httpd -M | grep status status_module (shared)
能出现以上提示就说明能支持查看httpd的运行状态信息
6、创建测试页并进行测试网页,即在/data/vhosts/www1和/data/vhosts/www2下创建测试页
[root@localhost ~]# echo www1 > /data/vhosts/www1/index.html [root@localhost ~]# echo www2 > /data/vhosts/www2/index.html 测试: [root@localhost ~]# curl http://www1 www1 [root@localhost ~]# curl http://www2 www2 出现显示www1和www2,则说明两个虚拟主机工作正常 7、设置基于basic的访问控制,在/etc/httpd/conf.d/vhosts1.conf中添加内容,添加后的显示如下: <VirtualHost 172.16.6.6:80> ServerName www1 DocumentRoot /data/vhosts/www1 CustomLog logs/www1-access_log combined ErrorLog logs/www1-error_log <Location /server-status> SetHandler server-status AuthType basic AuthUserFile "/etc/httpd/.htpasswd" AuthName "Dangerous,it‘s only administrator area." Require User tom </Location> </VirtualHost> 设置访问相关的文件,用以存储用户tom登录时用到的信息: [root@localhost ~]# htpasswd -c -m /etc/httpd/.htpasswd tom New password: Re-type new password: Adding password for user tom /etc/httpd/.htpasswd为稍后登录时用到的存储tom账号和密码的文件。 检查之前所添加的文件是否有语法错误:
[root@localhost ~]# httpd -t
Syntax OK 说明语法检查正常,没有出现错误
让httpd重载配置文件:
[root@localhost ~]# service httpd reload Reloading httpd:
分别测试http://www1和http://www1/server-status页面
测试http://www1/server-status需要基于basic认证,需要输入用户tom的账号和密码才可以登录,输入之前设置tom的账号和密码后就可以显示内容了,登录后显示如下
至此,基于basic认证的虚拟主机www1以完成,接下来将完成虚拟主机www2的设置
8、设置www2禁止某个ip段访问,比如192.168.0.0,也可以禁止某一ip访问
<VirtualHost 172.16.6.6:80> ServerName www2 DocumentRoot /data/vhosts/www2 CustomLog logs/www2-access_log combined ErrorLog logs/www2-error_log <Directory "/data/vhosts/www2"> Options None AllowOverride None Order deny,allow deny from 192.168.0 deny from 172.16.6.3 </Directory> </VirtualHost> 之后,检查下文件的语法,并重新加载配置文件: [root@localhost ~]# httpd -t Syntax OK [root@localhost ~]# service httpd reload Reloading httpd: 这边在172.16.6.3上测试对www2的访问,显示禁止: [root@centos7 ~]# curl -I http://www2 HTTP/1.1 403 Forbidden Date: Thu, 14 Jul 2016 08:44:22 GMT Server: Apache/2.2.15 (CentOS) Accept-Ranges: bytes Content-Length: 4961 Connection: close Content-Type: text/html; charset=UTF-8 第二部分:配置虚拟主机www2能提供https服务 1、https是调用ssl库进行,所以首先需要安装下ssl的模块 [root@localhost ~]# yum install mod_ssl 2、这边先用一台机器 172.16.6.1作为CA,并对提供https服务的机器提供证书签发 使用172.16.6.1创建为私有CA: [root@localhost ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) Generating RSA private key, 2048 bit long modulus .............................+++ ...........+++ e is 65537 (0x10001) 生成自签证书: [root@localhost ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 3、虚拟主机www2上生成私钥,然后生成证书申请,并发给私有CA 172.16.6.1 [root@localhost ~]# mkdir /etc/httpd/ssl [root@localhost ~]# (umask 077 ; openssl genrsa -out /etc/httpd/ssl/httpd.key 1024) 创建证书用到的数据库文件: [root@localhost CA]# touch index.txt [root@localhost CA]# echo 01 > serial 将证书申请发给CA: [root@localhost ~]# scp /etc/httpd/ssl/httpd.csr 172.16.6.1:/etc/pki/CA/newcerts/ root@172.16.6.1‘s password: httpd.csr CA签署证书: [root@localhost CA]# openssl ca -in /etc/pki/CA/newcerts/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 100% 676 0.7KB/s 00:00 签署截图如下:
4、将此证书发给虚拟主机www2,并修改ssl的配置文件/etc/httpd/conf.d/ssl.conf
[root@localhost ~]# scp /etc/pki/CA/certs/httpd.crt 172.16.6.6:/etc/httpd/ssl/ 将修改以下几项: DocumentRoot "/data/vhosts/www2" ServerName www2:443 SSLCertificateFile /etc/httpd/ssl/httpd.crt SSLCertificateKeyFile /etc/httpd/ssl/httpd.key 验证修改的文件是否有语法错误,并重新加载配置: [root@localhost httpd]# httpd -t Syntax OK [root@localhost httpd]# service httpd reload Reloading httpd: 5、测试虚拟主机www2的https服务是否能正常访问
显示无法验证证书,由于CA的证书还未导入到浏览器
这边还提供一个测试办法:将CA证书发到测试的机器上,并用CA证书进行测试,如下
[root@centos7 ~]# curl --cacert /root/cacert.pem https://www2 www2 显示结果为虚拟主机www2的证书通过了验证,并得以显示
使用httpd(即apache)搭建多个虚拟主机和https相关的用法
原文地址:http://yy0430.blog.51cto.com/11619642/1826472