前文介绍了httpd的基本配置,本文介绍部分高级应用的配置。
实验前提:
关闭防火墙和SELinux;
关闭中心主机。
实验环境:
服务器:
系统版本:CentOS6.6 x86_64;
服务软件版本:httpd2.2,CentOS 6.6镜像提供rpm包;
客户端:
系统版本:Windows7x86_64;
浏览器:Chrone44;
域名解析:由本地Hosts文件实现,不再配置DNS服务器(详情见博客内DNS相关文章);
一、虚拟主机;
1、基于端口的虚拟主机;
站点A:
FQDN:www.chencer.org
端口:80
站点文件:/web/www/index.html
站点B:
FQDN:www.chencer.org
端口:8080
站点文件:/web/port/index.html
实验配置:
主配置文件
# vim /etc/httpd/conf/httpd.conf > Listen 80 > Listen 8080 > > <VirtualHost192.168.1.10:80> > ServerName www.chencer.org > DocumentRoot"/web/www" > </VirtualHost> > > <VirtualHost192.168.1.10:8080> > ServerName www.chencer.org > DocumentRoot"/web/port" > </VirtualHost>
提供网页文件:
# mkdir -p /web/{www,port} # echo "www.chencer.org:80" > /web/www/index.html # echo "www.chencer.org:8080" > /web/port/index.html
检查配置文件语法,重启服务,查看监听端口:
# httpd –t # service httpd restart # ss –tnl |grep :80
80/tcp和8080/tcp被监听:
客户端测试:
Hosts文件添加解析记录:
站点A:
站点B:
2、基于IP的虚拟主机;
站点A:
FQDN:www.chencer.org
IP:192.168.1.10
站点文件:/web/www/index.html
站点B:
FQDN:bbs.chencer.org
IP:192.168.1.11
站点文件:/web/bbs/index.html
实验配置:
主配置文件:
> # vim /etc/httpd/conf/httpd.conf > <VirtualHost 192.168.1.10:80> > ServerName www.chencer.org > DocumentRoot "/web/www" > </VirtualHost> > > <VirtualHost 192.168.1.11:80> > ServerName bbs.chencer.org > DocumentRoot "/web/bbs" > </VirtualHost>
提网页文件:
# mkdir -p /web/{www,bbs} # echo "www.chencer.org" > /web/www/index.html # echo "bbs.chencer.org" > /web/bbs/index.html
检查配置文件语法,重启服务:
# httpd –t # service httpd restart
客户端测试:
Hosts文件添加解析记录:
站点A:
站点B:
3、基于主机名的虚拟主机;
站点A:
FQDN:www.chencer.org
站点文件:/web/www/index.html
站点B:
FQDN:blog.chencer.org
站点文件:/web/blog/index.html
实验配置:
主配置文件:
> # vim/etc/httpd/conf/httpd.conf > NameVirtualHost192.168.1.10:80 > > <VirtualHost192.168.1.10:80> > ServerName www.chencer.org > DocumentRoot "/web/www" > </VirtualHost> > > <VirtualHost192.168.1.10:80> > ServerName blog.chencer.org > DocumentRoot "/web/blog" ></VirtualHost>
提网页文件:
# mkdir -p /web/{www,blog} # echo "www.chencer.org" > /web/www/index.html # echo "blog.chencer.org" > /web/blog/index.html
检查配置文件语法,重启服务:
# httpd –t # service httpd restart
客户端测试:
Hosts文件添加解析记录:
A主机:
B主机:
二、基于用户的访问控制;
用户认证:
基本认证:Basic
摘要认证:Digest
虚拟用户:仅用于访问某服务或获取某资源的凭证;
文本文件:*.htpasswd
SQL数据库
dbm:数据库引擎,提供API
ldap:
authenticationprovider:账号和密码的存储机制;
authn
authorizationprovider: 授权
# htpasswd: -c:如果此文件事先不存在,则创建;注意,只能在创建第一个用户时使用; -m:以md5的格式编码存储用户的密码信息; -D:删除指定用户;
实例:
站点A;
FQDN:www.chencer.org/admin
允许用户jim和tom访问;
站点B;
FQDN:ops.chencer.org/admin
仅允许ops组访问,jim属于ops组;
实验配置:
主配置文件:
# vim/etc/httpd/conf/httpd.conf > NameVirtualHost192.168.1.10:80 > > <VirtualHost192.168.1.10:80> > ServerName www.chencer.org > 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> > > <VirtualHost192.168.1.10:80> > ServerName ops.chencer.org > DocumentRoot /web/ops > <Directory"/web/ops/admin"> > Options none > AllowOverride AuthConfig > AuthType Basic > AuthName " Admin Area." > AuthUserFile /etc/httpd/conf/.htpasswd > AuthGroupFile /etc/httpd/conf/.htgroup > Require group ops > </Directory> > </VirtualHost>
生成认证文件:
创建用户:
# htpasswd -mc /etc/httpd/conf/.htpasswd jim # htpasswd -m /etc/httpd/conf/.htpasswd tom
jim加入ops组:
# echo "ops: jim " > /etc/httpd/conf/.htgroup
提供网页文件:
# mkdir -p /web/{www,ops}/admin # echo "www.chencer.org/admin" > /web/www/admin/index.html # echo "ops.chencer.org/admin" > /web/ops/admin/index.html
检查配置文件语法,重启服务;
# httpd –t # service httpd restart
客户端测试:
Hosts文件添加解析记录:
jim访问站点A:
jim访问站点B:
tom访问站点A:
tom访问站点B:
三、Https;
httpd:
ssl模块:mod_ssl,单独成包
ssl会话基于IP地址创建,所以,每一个IP仅创建一个SSL会话;
ssl握手要完成的工作:
交换协议版本号
选择双方都支持的加密方式
客户端对服务器端实现身份验正
密钥交换
https协议:基于SSL二进制编码,443/tcp
openssl s_client
客户端验正服务器端证书:
有效性检测:证书是否仍然在有效期内
CA的可信度检测
证书的完整性检测
持有者的身份检测
实例:
站点:www.chencer.org提供https服务;
安装mod_ssl模块:
# yuminstall mod_ssl # rpm –ql mod_ssl
# /etc/httpd/conf.d/ssl.conf :mod_ssl配置文件;
服务器自建CA,自签证书(详细信息见自建CA博客):
# (umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 # touch /etc/pki/CA/{index.txt,serial} # echo 01 > /etc/pki/CA/serial
创建证书,签署请求;
# (umask 077 ; openssl genrsa -out /etc/httpd/httpd.key 2048) # openssl req -new -key/etc/httpd/httpd.key -out /etc/httpd/httpd.csr # openssl ca -in/etc/httpd/httpd.csr -out /etc/httpd/httpd.crt -days 3650
配置mod_ssl模块配置文件:
# vim/etc/httpd/conf.d/ssl.conf DocumentRoot "/web/www" ServerName www.chencer.org:443 SSLCertificateFile /etc/httpd/httpd.crt SSLCertificateKeyFile /etc/httpd/httpd.key
提供网页文件:
# mkdir -p /web/www # echo "https:www.chencer.org:443" > /web/www/index.html
检查配置文件语法,重启服务,查看监听端口;
# httpd –t # service httpd restart # ss –tnl | grep :443
客户端访问测试:
下载安装CA证书,cacert.pem重命名为cacert.crt:
访问站点: