分别使用httpd-2.2和httpd-2.4实现多虚拟主机配置和https功能
1、建立httpd服务,要求:
(1)提供两个基于名称的虚拟主机www1.ipsecx.com,www2.ipsecx.com;有单独的错误日志和访问日志;
(2)通过www1.ipsecx.com的/server-status提供状态信息,且仅允许tom用户访问;
(3)www2.ipsecx.com不允许172.16.254.180主机访问;
2、为上面的第2个虚拟主机提供https服务;
实验环境:
服务器端:CentOS 6.7 ,本地光盘yum源,httpd-2.2版本,IP地址:172.16.30.100
CA服务器:CentOS 7.2 ,本地光盘yum源,httpd-2.2版本,IP地址:172.16.254.144
客户机: CentOS7.2 , IP地址:172.16.254.180
真机:Windows 7 ,IP地址:172.16.250.169
http2.2版本
配置多虚拟主机:
CentOS6.7 安装httpd-2.2程序
安装完成后,确认httpd程序的版本信息
查看httpd程序安装完成后,生成哪些文件
配置虚拟主机www1.ipsecx.com和 www2.ipsecx.com
httpd的主配置文件 /etc/httpd/conf/httpd.conf
httpd的额外的配置文件/etc/httpd/conf.d/*.conf
为了避免因为修改主配置文件,造成未知错误,可以将建立虚拟主机的配置文件,放在/etc/httpd/conf.d/ 目录下,这样,httpd服务在启动过程中,同样也会加载此目录的配置文件,而避免不必要的麻烦。
在/etc/httpd/conf.d/目录下创建virtualhost.conf文件,配置以下内容
在虚拟主机配置文件中定义的目录,必须要事先存在哟!否则会报错!
在各个虚拟主机的根目录下面创建index.html的主页文件
配置完成后,验证配置文件是否存在错误,显示正常。
这个时候,大家很容易看到第一条信息,其实那并不是错误,提示不能解析到服务器的FQDN,用localhost.localdomain代替主机名称,如果你不想让服务器在提示这种信息,可以在配置文件/etc/httpd/conf/httpd.conf中,按照以下方式修改,修改完成后,验证,正常。
启动httpd服务,确保服务正常启动
验证:
要想域名生效,必须互联网能够解析这两个域名,由于我并没有去注册这两个域名,那如何验证部署是否成功呢?
可以在客户机的hosts文件里面,添加自定义的主机映射关系,本案例以CentOS7为客户端,进行演示:
修改/etc/hosts文件,添加以下内容:
利用curl命令,验证服务器虚拟主机是否配置正确
成功获取网站主页内容!让我们看看服务器端是否产生了日志
至此,httpd2.2版本实现多虚拟主机配置完成!
实现httpd状态页的访问控制:
要想实现通过www1的/server-status提供状态信息,且仅允许tom用户访问;那么这个/server-status在哪里呢?那好吧,咱们先看一下主配置文件/etc/httpd/conf/httpd.conf
通过搜索 server-status,找到这个关键位置
那咱们就把这段代码复制到建立的virtualhost.conf文件里面吧,但是那个tom用户从哪里蹦出来的呢?难道是登录服务器的系统用户tom账号吗?oh ,不,不,你错了。这个tom账号,是用httpd程序里面自带的工具生成的,只允许登录web页面用的,是专属于这个服务的虚拟用户。这个工具就是htpasswd命令
那我们先生成一个叫做tom的账号吧,顺便在建立一个叫做jerry的账号吧。
Tom的账号密码均为tom
Jerry的账号密码均为jerry
账号,密码以md5加密方式,存储到/etc/httpd/conf.d/.htpasswd这个隐藏文件,为什么要隐藏,主要是怕别人偷看啦。哈哈哈
htpasswd –c –m –b /etc/httpd/conf.d/.htpasswd tom tom
htpasswd –m –b /etc/httpd/conf.d/.htpasswd jerry jerry
好了,账号tom有了,那么virtualhost.conf文件应该怎么修改呢?如果你不会,那就照着我的方法来吧。
修改完配置文件,重启httpd进程,如何验证成功?那用我的电脑真机来验证一下吧,
首先验证一下,www1的主页面是否正常
很好,没有问题,那在验证一下/server-status页面吧
很好,出现验证页面了,那么先利用jerry账号验证一下,由于认证不允许jerry账号访问,所以一直提示登录的这个页面,那在试一下tom账号。
哇,验证成功,显示出了status页面。
通过认证,实现用户对httpd状态页的权限控制
配置网站禁止某IP访问:
这个问题是虚拟主机www2.ipsecx.com不允许172.16.254.180主机访问,那还是继续修改配置文件;
仅在虚拟主机的www2的配置参数中修改,修改完成之后,重启httpd服务
登录172.16.254.180主机,利用curl命令测试一下,
对虚拟主机www1.ipsecx.com,可以访问,但是对www2.ipsecx.com来说,http报文head信息,响应报文状态码403,禁止客户端访问了!正常访问的状态码是200.
至此,实现了拒绝某用户对网站的访问权限功能
配置网站的https服务:
要想虚拟主机www2.ipsecx.com提供https服务,那么httpd服务需要装载一个mod_ssl模块,默认未安装。
服务器安装mod_ssl模块
安装完成后,我们可以看到此模块已经在/etc/httpd/conf.d目录下,生成一个ssl.conf的配置文件
打开配置文件/etc/httpd/conf.d/ssl.conf文件,在这个文件里面需要修改的配置项,仅有两项,如下图:
第一项:填写服务器从CA申请的证书文件路径,
第二项:填写服务器的私钥文件路径
下面,小编将演示一下如何搭建私有CA,并且服务器从CA申请证书的操作步骤。
生成自签证书
到此私有CA搭建基本完成,下面服务器开始申请证书:
3.将web服务器生成的证书发送给CA服务器
CA服务器签发web网站证书
查看证书:
将CA服务器签发的证书,发送给web服务器,放置在某特定目录
箭头指示的是证书文件,画线的文件是私钥文件,这两个文件路径要记住,因为要修改到/etc/httpd/conf.d/ssl.conf的配置文件中
修改/etc/httpd/conf.d/ssl.conf配置文件
修改完成之后,重启httpd服务,查看服务器监听端口
利用浏览器验证https服务是否开启
点击继续浏览此网站
至此,配置完成网站提供https功能
======================================================================================
======================================================================================
对于httpd-2.4 版本,创建虚拟主机,以及权限定义,如下:
测试效果如下:
测试,禁止172.16.254.180访问虚拟主机www2.ipsecx.com,其他主机可以访问。
在这里可以看到http报文的响应状态码是403,禁止访问。
在看一下其他IP地址的客户端的访问请求,如下图所示,访问一切正常!
由于作者水平有限,本文错漏缺点在所难免,希望读者批评指正。谢谢!