Loading... <p style="text-indent: 2em"><strong>前言</strong><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">上文讲解了http协议及httpd的一些特性,是学习web服务需要掌握的一些基础知识,接下来让我们进一步了解httpd相关功能的配置,本文讲解的是虚拟主机,访问控制及https等功能的配置。</p> <p style="text-indent: 2em"><strong>httpd之虚拟主机</strong><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">虚拟主机共分为三种模式:基于IP、基于端口、基于主机名(FQDN)<strong><br style="text-indent: 2em" /></strong></p> <p style="text-indent: 2em"><strong>实验环境介绍</strong></p> <p style="text-indent: 2em">开始之前,先介绍一下httpd在CentOS6.6版本及文件:<br style="text-indent: 2em" /></p> <pre class="brush:bash;toolbar:false">版本: httpd-2.2.15(CentOS7升级为2.4系列) 配置文件: /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf 服务脚本: /etc/rc.d/init.d/httpd 脚本配置文件:/etc/sysconfig/httpd 模块目录: /etc/httpd/modules: 链接文件 /usr/lib64/httpd/modules 主程序: /usr/sbin/httpd: prefork /usr/sbin/httpd.event: event /usr/sbin/httpd.worker: worker 日志文件目录: /var/log/httpd access_log: 访问日志 error_log: 错误日志 站点文档根目录: /var/www/html/images/a.jpg http://www.magedu.com/images/a.jpg</pre> <p style="text-indent: 2em">注意:配置虚拟主机之前要关闭中心主机</p> <pre class="brush:bash;toolbar:false">#DocumentRoot "/var/www/html"</pre> <p style="text-indent: 2em"><strong>基于IP的虚拟主机</strong><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">工作原理<strong><br style="text-indent: 2em" /></strong></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-48.jpg" title="1428984193810994.jpg" alt="基于IP虚拟主机.jpg" /></p> <p><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">实战配置</p> <p style="text-indent: 2em">案例要求:</p> <p style="text-indent: 2em">DNS服务器:172.16.10.10</p> <p style="text-indent: 2em">web服务器:两个IP 172.16.10.110、172.16.10.186</p> <p style="text-indent: 2em">要求web服务器同时提供两个站点(www.scholar.com、ops.scholar.com)</p> <p style="text-indent: 2em">www站点文件为/web/www/index.html 内容为www.scholar.com</p> <p style="text-indent: 2em">ops站点文件为/web/ops/index.html 内容为ops.scholar.com</p> <p style="text-indent: 2em">配置DNS正反向区域文件</p> <pre class="brush:bash;toolbar:false">#正向区域 $TTL 3600 @ IN SOA dns.scholar.com. admin.scholar.com. ( 2015041301 2H 10M 7D 1D ) @ IN NS dns @ IN MX 10 mail dns IN A 172.16.10.10 mail IN A 172.16.10.12 www IN A 172.16.10.110 ops IN A 172.16.10.186 #确保站点可以解析 pop IN CNAME mail ftp IN CNAME www #反向区域文件 $TTL 3600 @ IN SOA dns.scholar.com. admin.scholar.com. ( 2015041301 2H 10M 7D 1D ) @ IN NS dns.scholar.com. 10 IN PTR dns.scholar.com. 12 IN PTR mail.scholar.com. 110 IN PTR www.scholar.com. 186 IN PTR ops.scholar.com.</pre> <p style="text-indent: 2em">检查语法,重启服务</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-4.jpg" title="1428984222720449.jpg" alt="1.jpg" /></p> <p style="text-indent: 2em">注意:DNS具体配置详见博客</p> <p style="text-indent: 2em">创建虚拟主机</p> <pre class="brush:bash;toolbar:false">[root@scholar ~]# vim /etc/httpd/conf/httpd.conf <VirtualHost 172.16.10.110:80> ServerName www.scholar.com DocumentRoot "/web/www" </VirtualHost> <VirtualHost 172.16.10.186:80> ServerName ops.scholar.com DocumentRoot "/web/ops" </VirtualHost></pre> <p style="text-indent: 2em">创建站点文件,检查语法,重启服务并设置开机自启<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-91.jpg" title="1428984345112018.jpg" alt="2.jpg" /></p> <p style="text-indent: 2em">测试两个站点是否可以访问<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-17.jpg" title="1428984366487698.jpg" alt="3.jpg" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-88.jpg" title="1428984387111148.jpg" alt="4.jpg" /></p> <p style="text-indent: 2em">测试成功,基于IP的虚拟主机配置完成</p> <p style="text-indent: 2em">注意:测试时请确保测试主机DNS指向DNS服务器且处于离线状态,如果不想离线,请修改hosts文件,确保FQDN可以解析。如果访问失败,请关闭web服务器的selinux。</p> <p style="text-indent: 2em"><strong>基于端口的虚拟主机</strong></p> <p style="text-indent: 2em">工作原理</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-11.jpg" title="1428984415109051.jpg" alt="基于端口虚拟主机.jpg" /></p> <p style="text-indent: 2em">实战配置</p> <p style="text-indent: 2em">案例要求:</p> </p> <p style="text-indent: 2em">DNS服务器:172.16.10.10</p> <p style="text-indent: 2em">web服务器:172.16.10.110</p> <p style="text-indent: 2em">要求web服务器开启8080端口,一个FQDN提供两个站点,访问www.scholar.com和</p> <p style="text-indent: 2em">www.scholar.com:8080返回不同结果 </p> <p style="text-indent: 2em">8080站点文件为/web/port/index.html 内容为 www.scholar.com:8080</p> <p style="text-indent: 2em">创建虚拟主机</p> <pre class="brush:bash;toolbar:false">Listen 80 Listen 8080 #监听8080端口 <VirtualHost 172.16.10.110:80> ServerName www.scholar.com DocumentRoot "/web/www" </VirtualHost> <VirtualHost 172.16.10.110:8080> ServerName www.scholar.com DocumentRoot "/web/port" </VirtualHost></pre> <p style="text-indent: 2em">创建站点文件,测试语法,重启服务<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-1.jpg" title="1428984459703232.jpg" alt="5.jpg" /></p> <p style="text-indent: 2em">测试新站点是否可以访问</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-52.jpg" title="1428984477418378.jpg" alt="6.jpg" /></p> <p style="text-indent: 2em">访问成功,基于端口的虚拟主机配置完成</p> <p style="text-indent: 2em"><strong>基于主机名的虚拟主机</strong></p> <p style="text-indent: 2em">工作原理<strong><br style="text-indent: 2em" /></strong></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-18.jpg" title="1428984507140204.jpg" alt="基于主机名虚拟主机.jpg" /></p> <p style="text-indent: 2em">实战配置<br style="text-indent: 2em" /></p> <p style="text-indent: 2em">案例要求:</p> </p> <p style="text-indent: 2em">DNS服务器:172.16.10.10</p> <p style="text-indent: 2em">web服务器:172.16.10.110</p> <p style="text-indent: 2em">要求web服务器提供两个站点(www.scholar.com dev.scholar.net )</p> </p> <p style="text-indent: 2em">www站点文件为/web/www/index.html 内容为www.scholar.com</p> <p style="text-indent: 2em">dev站点文件为/web/dev/index.html 内容为dev.scholar.net</p> <p style="text-indent: 2em">配置DNS添加区域及区域文件</p> <pre class="brush:bash;toolbar:false">[root@lab ~]# vim /etc/named.conf zone "scholar.net" IN { type master; file "scholar.net.zone"; }; zone "16.172.in-addr.arpa" IN { type master; file "172.16.10.net"; };</pre> <pre class="brush:bash;toolbar:false">#正向区域文件 $TTL 3600 @ IN SOA dns.scholar.net. admin.scholar.net. ( 2015041302 2H 10M 7D 1D ) @ IN NS dns dns IN A 172.16.10.10 www IN A 172.16.10.110 dev IN A 172.16.10.110 #反向区域文件 $TTL 3600 @ IN SOA dns.scholar.net. admin.scholar.net. ( 2015041302 2H 10M 7D 1D ) @ IN NS dns.scholar.net. 10.10 IN PTR dns.scholar.net. 10.110 IN PTR www.scholar.net. 10.110 IN PTR dev.scholar.net.</pre> <p style="text-indent: 2em">检查语法重启服务</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-16.jpg" title="1428984538271557.jpg" alt="7.jpg" /></p> <p style="text-indent: 2em">创建虚拟主机</p> <pre class="brush:bash;toolbar:false">NameVirtualHost *:80 <VirtualHost *:80> ServerName www.scholar.com DocumentRoot "/web/www" </VirtualHost> <VirtualHost *:80> ServerName dev.scholar.net DocumentRoot "/web/dev" </VirtualHost></pre> <p style="text-indent: 2em">创建站点文件,检查语法,重启服务</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-9.jpg" title="1428984558120111.jpg" alt="8.jpg" /></p> <p style="text-indent: 2em">测试站点是否可以访问<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-24.jpg" title="1428984578141424.jpg" alt="9.jpg" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-59.jpg" title="1428984596433189.jpg" alt="10.jpg" /></p> <p style="text-indent: 2em">OK,访问成功,基于主机名的虚拟主机配置完成</p> <p style="text-indent: 2em"><strong>httpd之访问控制</strong></p> <p style="text-indent: 2em">访问控制可分为两种模式:基于用户访问控制和基于IP访问控制<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><strong>基于用户访问控制</strong><br style="text-indent: 2em" /></p> <p style="text-indent: 2em">工作原理<strong><br style="text-indent: 2em" /></strong></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-17-1.jpg" title="1428984624408217.jpg" alt="基于用户访问控制.jpg" /></p> <p style="text-indent: 2em">实战配置<br style="text-indent: 2em" /></p> <p style="text-indent: 2em">案例要求:</p> </p> <p style="text-indent: 2em">DNS服务器:172.16.10.10</p> <p style="text-indent: 2em">web服务器:172.16.10.110</p> <p style="text-indent: 2em">要求web服务器在www.scholar.com站点下创建一个子页为站点管理页,非授权用户禁止访问。</p> <p style="text-indent: 2em">子页位置/web/www/admin/index.html 内容为Admin</p> <p style="text-indent: 2em">创建子页</p> <pre class="brush:bash;toolbar:false"><VirtualHost *:80> ServerName www.scholar.com DocumentRoot "/web/www" <Directory "/web/www/admin"> Options none AllowOverride AuthConfig AuthType Basic #认证方式 AuthName "Admin Area." #质询时弹出的提示信息 AuthUserFile /etc/httpd/conf/.htpasswd #用户账号密码存放位置 Require valid-user #所有合法用户都可访问,也可用定义单用户及组认证 </Directory> </VirtualHost></pre> <p style="text-indent: 2em">创建子页文件,检查语法,重启服务</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-67.jpg" title="1428984644123197.jpg" alt="11.jpg" /></p> <p style="text-indent: 2em">提供认证文件<br style="text-indent: 2em" /></p> <pre class="brush:bash;toolbar:false">htpasswd -c: 如果此文件事先不存在,则创建 #注意,只能在创建第一个用户时使用 -m:以md5的格式编码存储用户的密码信息 -D:删除指定用户</pre> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160132-10.jpg" title="1428984730979835.jpg" alt="12.jpg" /></p> <p style="text-indent: 2em">测试认证<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160133-51.jpg" title="1428984755122764.jpg" alt="13.jpg" /></p> <p style="text-indent: 2em">输入账户密码</p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160133-44.jpg" title="1428984823298219.jpg" alt="14.jpg" /></p> <p style="text-indent: 2em">成功访问,基于用户的访问控制配置完成</p> <p style="text-indent: 2em"><strong>基于IP的访问控制</strong></p> <p style="text-indent: 2em">工作原理<strong><br style="text-indent: 2em" /></strong></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160133-13.jpg" title="1428984848108294.jpg" alt="基于IP访问控制.jpg" /></p> <p style="text-indent: 2em">实战配置<br style="text-indent: 2em" /></p> <p style="text-indent: 2em">案例要求:</p> </p> <p style="text-indent: 2em">DNS服务器:172.16.10.10</p> <p style="text-indent: 2em">web服务器:172.16.10.110</p> <p style="text-indent: 2em">要求web服务器的dev.scholar.net站点,作为测试站点,只允许web服务器访问测试</p> <p style="text-indent: 2em">添加访问控制IP</p> <pre class="brush:bash;toolbar:false"><VirtualHost *:80> ServerName dev.scholar.net DocumentRoot "/web/dev" <Directory "/web/dev"> Order allow,deny #httpd2.4系列不再支持这种限定,改为新的限定方式 allow from 172.16.10.110 </Directory> </VirtualHost></pre> <p style="text-indent: 2em">测试语法,重启服务<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="//cto.wang/usr/uploads/2016/07/20160703160133-98.jpg" title="1428984872281996.jpg" alt="15.jpg" /></p> <p style="text-indent: 2em">测试非授权IP能否正常访问<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/c20tjbmmewk.jpg" title="1428984898118861.jpg" alt="16.jpg" /></p> <p style="text-indent: 2em">访问被拒绝,接下来用web服务器自测<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/334w1hpjujm.jpg" title="1428984916112382.jpg" alt="17.jpg" /></p> <p style="text-indent: 2em">可以访问,基于IP的访问控制配置完成</p> <pre class="brush:bash;toolbar:false">#elinks需要自行安装,-dump: 获取到页面数据后直接退出进程</pre> <p style="text-indent: 2em"><strong>httpd之https</strong></p> <p style="text-indent: 2em">前面我们讲了基于OpenSSL构建CA的过程,那么如何应用于httpd实现https呢,下面我们就来看一下,https通信是如何实现的。</p> <p style="text-indent: 2em"><strong>http事务与https事务对比</strong></p> <p style="text-indent: 2em"><strong><img src="/upload/iooskfsohoz.png" title="1428984940444593.png" alt="https.png" /></strong></p> <p style="text-indent: 2em"><strong>https配置</strong></p> <p style="text-indent: 2em">实战配置</p> <p style="text-indent: 2em">案例要求:</p> </p> <p style="text-indent: 2em">DNS服务器:172.16.10.10</p> <p style="text-indent: 2em">web服务器:172.16.10.110</p> <p style="text-indent: 2em">要求web服务器的www.scholar.com站点使用https</p> <p style="text-indent: 2em">配置httpd工作于https<br style="text-indent: 2em" /></p> <p style="text-indent: 2em">要配置https首先要安装mod_ssl模块,请自行安装</p> <p style="text-indent: 2em">为服务端生成私钥,并为其提供证书<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/xkmw24kuusv.jpg" title="1428984961419042.jpg" alt="18.jpg" /></p> <p style="text-indent: 2em">签署证书,我这里本机就是CA就自签了,CA配置详见博客<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/paswq0qqkym.jpg" title="1428984981814027.jpg" alt="19.jpg" /></p> <p style="text-indent: 2em">配置使用https的虚拟主机</p> <pre class="brush:bash;toolbar:false">[root@scholar ssl]# vim /etc/httpd/conf.d/ssl.conf SSLCertificateFile /etc/httpd/ssl/httpd.crt #证书位置 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key #私钥位置 DocumentRoot "/web/www" #虚拟主机站点文件 ServerName www.scholar.com:443 #虚拟主机ServerName</pre> <p style="text-indent: 2em">测试语法,重启服务,查看443端口是否被监听<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/esidjtcnjrx.jpg" title="1428985008269609.jpg" alt="20.jpg" /></p> <p style="text-indent: 2em">将CA证书导出,重命名为*.crt格式,安装在受信任的根证书颁发机构中,测试https<br style="text-indent: 2em" /></p> <p style="text-indent: 2em"><img src="/upload/10fx1allier.jpg" title="1428985026659515.jpg" alt="21.jpg" /></p> <p style="text-indent: 2em">OK,测试成功,已经实现https的访问,是不是很简单呢?到此,https配置完成</p> <p style="text-indent: 2em"><strong>The end</strong></p> <p style="text-indent: 2em">httpd的虚拟主机、访问控制及https就讲解到这里啦,httpd的功能确实很强大,其它功能请见后续文章,下文将讲解编译安装httpd2.4.9和新特性说明及其它功能的实现,感兴趣的可见下文。</p> <p style="text-indent: 2em">以上仅为个人学习整理,如有错漏,大神勿喷~~~</p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信