码迷,mamicode.com
首页 > Web开发 > 详细

http初探

时间:2016-07-17 02:34:27      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:web服务器之http初探

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初探

标签:web服务器之http初探

原文地址:http://linuxfarm.blog.51cto.com/6364033/1827008

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!