httpd目前为止时最受欢迎的web服务器,占据大约60%的份额,下面来开启httpd服务之旅。
以httpd2.2 做了资料粗略整理,如有雷同纯属巧合 ^_^
http:hyper text tranfer protocol, 超文本传输协议;
http协议历程:
http/0.9:原型版本;
http/1.0:cache, MIME(multipupose internet Mail Extensions)
method:GET、POST、HEAD、PUT、DELETE、TRACE
OPTIONS、...
http/1.1:缓存功能大大增强,目前为止为主流
speedy:spdy
http/2.0
一次完整的http请求的处理过程:
(1) 建立或处理连接:接收请求或拒绝请求;
(2) 接收请求:接收客户端发来的具体请求报文;
(3) 处理请求:对请求报文进行解析;
(4) 访问资源:通过存储IO获取用户请求的资源;
(5) 构建响应报文:
(6) 发送响应报文 :
(7) 记录于日志中:
Apache的并发响应模型:
单进程I/O模型:串行响应;
多进程I/O模型:同时启动多个进程,每个进程响应一个请求;
复用的I/O模型:一个进程响应多个请求;
多线程模型:一个进程生成多个线程,每个线程响应一个请求;
事件驱动:一个进程直接响应多个请求;
复用的多进程I/O结构:启动m个进程,每个进程生成n个线程,每个线程响应一个请求;
http请求处理中的连接方式:
保持连接:长连接,tcp连接建立后,资源获取完成不会断开连接,
而是继续等待请求其它资源; 可以从时间和数量上面进行控制
相关指令:
KeepAlive On|Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
非保持连接:短连接,
httpd的特性:
高度模块化:core + modules
DSO: Dynamic shared objects
支持动态装载和卸载;
MPM:multipath processing modules
httpd三大工作模式:
prefork:一个主进程,多个子进程;一个进程响应一个请求;
主进程:管理子进程;创建套接字;接收用户请求,并派 发给某子进程处理;...
子进程:处理请求、响应请求;
worker:多进程多线程模型;一个线程响应一个请求;
主进程:管理子进程;创建套接字;接收用户请求,并派 发给某子进程处理;...
子进程:负责管理线程;
线程:处理并响应请求;
event:事件驱动模型,多进程模型,每个进程响应多个请求;
主进程:管理子进程;创建套接字;接收用户请求,并派 发给某子进程处理;...
子进程:处理并响应请求;
注意:如果需要修改httpd的工作模式,默认工作在prefork模式下 vim /etc/httpd/httpd
启用 HTTPD=/usr/sbin/httpd.worker
#service httpd restart
httpd-2.2:event为测试模型,默认MPM不支持DSO机制
CentOS 6:httpd-2.2
sysinit脚本:/etc/rc.d/init.d/httpd
程序环境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
脚本配置文件:/etc/sysconfig/httpd
日志文件:
/var/log/httpd
access_log:访问日志
error_log:错误日志
站点文档根目录:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
认证方式分为两种:一种是基于IP地址的访问控制,另一种是基于用户的访问控制
基于IP地址的访问控制;
order用于定义allow和deny的生效次序;
allow from IP/NETWORK/FQDN
deny from IP/NETWORK/FQDN
来源地址格式:
IP
NetAddr:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
FQDN
DAMAIN
来源请求遵循最佳匹配法则机制
基于用户的访问控制机制
http协议的认证功能:
认证质询 WWW-Authenticate:响应码为401,拒绝客户端请求,并说 明要求客户端提供账号和密码;
认证: Authorization:客户端填入账号和密码后再次发送请求报 文;认证通过后,服务端发送响应资源;
认证的方式有两种:
basic:明文 ###实验中我们采取basic认证
digest:消息摘要认证
虚拟账号:仅用于访问某服务的账号和密码;
存储于何处(httpd要有相应的适配模块)?
文本文件
SQL数据库
ldap目录数据库
实验环境:
系统 Centos 6.7(x86_64) httpd2.2版本
注CA服务器和Http服务器时虚拟机桥接 ,Windows 是真机,3台机器互通,防火墙关掉,selinux关闭
#iptable -F
#setenforce 0
修改windows主机的host文件
172.16.254.247 www1.nick.com
172.16.254.247 www2.nick.com
修改CA服务器hosts文件
172.16.254.247 www1.nick.com
172.16.254.247 www2.nick.com
修改这里主要用于测试,没有其他用途
实验要求:
1、建立httpd服务,要求:
(1) 提供两个基于名称的虚拟主机www1, www2;有单独的错误日志和访问日志;
(2) 通过www1的/server-status提供状态信息,且仅允许tom用户访问;
(3) www2不允许192.168.0.0/24网络中任意主机访问;
本实验中就用 172.16.254.234代替测试
2、为上面的第2个虚拟主机提供https服务;
一、 安装httpd2.2
1、#yum install httpd -y ###前提已经配置好yum仓库了
2、 vim /etc/httpd/conf/httpd.conf
Listen 80 ##指定监听端口
DocumentRoot "/var/www/html" ##我们基于虚拟主机的所有要 注释这行,
NameVirtualHost 172.16.254.247:80 ##基于名称的虚拟主机需要开启,不然只能解析一个
mkdir -pv /date/vhosts/www{1,2} ##创建网站页面
echo "test www1" >/date/vhosts/www1/index.html
echo "test www2" >/date/vhosts/www2/index.html 测试页面
创建虚拟主机配置文件
#vim /etc/httpd/conf.d/vhost1.conf
<VirtualHost 172.16.254.247:80>
DocumentRoot /date/vhosts/www1
ServerName www1.nick.com
CustomLog logs/www1-access_log common
ErrorLog logs/www1-error_log
<Location /server-status>
SetHandler server-status
AuthType Basic #
AuthName "administrations zone"
AuthUserFile "/etc/httpd/conf/.htpasswd" #需要创建.htpasswd文件,文件名可以任意
Require user tom
</Location>
</VirtualHost>
#touch /etc/httpd/conf/.htpasswd
创建账号文件语法
htpasswd [options] /PATH/TO/HT_PASSWD_FILE USERNAME
-c:创建文件;
-m:md5加密密码;
-s: SHA加密密码;
-D:删除指定用户
这里我们就 #htpasswd -c -m /etc/httpd/conf/.htpasswd tom
#然后输入密码就OK了
到这里我们就完成实验1中的前两个要求了
在Windows主机浏览器输入www1.nick.com
在Windows 主机输入www1.nick.com/server-status 出现久违的画面
配置虚拟主机vhost2
#vim /etc/httpd/conf.d/vhost2.conf
<VirtualHost 172.16.254.247:80>
DocumentRoot /date/vhosts/www2
ServerName www2.nick.com
CustomLog logs/www2-access_log common
ErrorLog logs/www2-access_log
<Directory "/date/vhosts/www2">
Order allow,deny
deny from 172.16.254.234
Allow from all
</Directory>
</VirtualHost>
到这为止CA就无法访问www2.nick.com 只有Windows主机可以访问www2.nick.com
到此为止实验一就圆满结束了
https服务器的实现:
先创建CA服务器
配置文件/etc/pki/tls/openssl.cnf
构建私有CA:
在确定配置为CA的服务商生成一个自签证书,并为CA提供所需要的目录及文件即可:
步骤:
(1)生成私钥:
#(umask 077;openssl genrsa - out /etc/pki/CA/private/cakey.pem 2048)
(2)生成自签证书:
#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
-new: 生成新证书签署请求;
-x509: 生成自签格式证书, 专用于创建私有CA时
-key: 生成请求时用到的私有文件路径;
-days n:证书的有效期限;
-out/PATH/TO/SOMECERTFILE: 生成的请求文件路径;如果自签操作将直接生成签署过的 证书
-days :证书的有效时长,单位是天
(3)位CA提供所需的目录及文件:
#mkdir -pv /etc/pki/CA/{cents,crl,newcerts}
#touch /etc/pki/CA/{serial,index.txt}
#echo 01 >/etc/pki/CA/serial
要用到证书进行安全通信的服务器,需要向CA请求签署证书:
步骤
(1)用到证书的主机生成私钥 即 172.16.254.247
#mkdir /etc/httpd/ssl
#cd /etc/httpd/ssl
#(umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048 )
(2) 生成证书签署请求
#openssl req -new -key /etc/httpd/ssl/httpd.key - out /etc/httpd/ssl/httpd.csr -days 365
(3) 将请求通过可靠方式发送给CA主机;
scp /etc/httpd/ssl/httpd.csr 172.16.254.234:/tmp/httpd.csr
(4) 在CA主机上签署证书:
#openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
(5)把授权的证书发给用到证书的服务器
scp /etc/pki/CA/certs/httpd.crt 172.16.254.247:/etc/httpd/ssl/
查看证书中的信息
#openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serical -subject
2.
配置httpd支持使用ssl,及使用的证书;
# yum -y install mod_ssl
编辑 配置文件:/etc/httpd/conf.d/ssl.conf
DocumentRoot "/date/vhosts/www2"
ServerName www2.nick.com
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
客户端验证 https://www2.nick.com
实验目的达到就不在导入证书了
第一次写博客,如有错误之处,请大侠多多指点
本文出自 “Linux运维探索之路” 博客,请务必保留此出处http://linuxfarm.blog.51cto.com/6364033/1827008
原文地址:http://linuxfarm.blog.51cto.com/6364033/1827008