http协议及apache配置

   http:hypter text transfer protocol

             html:编程语言,超文本标记语言

             MIME:multipurpose internet mail extesion

                     工作机制:

                            http请求

                            http响应

                     web资源web:web resourse

                            静态文件:.jpg,.gif,.txt.js,.css,.mp3,.avi

                            动态文件:.php,.jsp,

                            媒体:

                                   媒体类型(MIME类型):major/minor

                                          text/html

                                          text/plain

                                          image/jpeg

                                          image/gif

                     URI:uniform resource identifier

                            URL:uniform resource locator,用于描述某服务某特定资源的位置

                                   scheme://server:port/path/to/resource      

                                          http://www.magedu.com/images/logo.jpg

                            URN:uniform resource naming

 

                     http协议版本:

                            HTTP/0.9:原型版本,功能简陋

                            HTTP/1.0:第一个广泛使用的版本,支持MIME

                            HTTP/1.1:增强了缓存功能

                            spdy

                            HTTP/2.0:

                            rfc

              一次完整的http请求过程:

                     (1)建立或处理连接,接收请求或拒绝请求

                     (2)接收请求

                            接收来自于网路ode请求报文中对某资源的一次请求过程

                            并发访问模型(web I/O):

                                   单进程I/O结构,启动一个进程处理用户请求,而且每次只处理一个,多个请求被串行响应

                                   多进程I/O结构:并行多个进程,每个进程响应一个请求

                                   复用I/O结构,一个进程响应n个请求

                                          多线程模型:一个进程生成N个线程,每个线程响应一个用户请求,

                                          事件驱动:event-driven

                                   复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求     

                    (3)处理请求,对请求报文进行解析,并获取请求的资源及请求方法等相关信息

                            元数据:请求报文首部

                                   <method> <URL> <version>

                                   host:www.magedu.com  请求的主机名称

                                   connection:

                     (4)访问资源:获取请求报文中请求的资源

                        web服务器:即存放了web资源的服务器,负责向请求者提供对方请求的静态资源或动态资源

                                   /var/www/html/

                                          images/1.jpg

                                   http://www.magedu.com/images/1.jpg     

                                   web服务器资源路径映射方式:

                                          (a)docroot

                                          (b)alias

                                          (c)虚拟主机docroot

                                          (d)用户家目录docroot

                     (5)构建响应报文

                            资源的MIME类型:

                                   显式分类

                                   魔法分类

                                   协商分类

                            URL重定向:

                                   web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径

                     (6)发送响应报文

                     (7)记录日志

              http服务器程序:

                     httpd(apache)

                     nginx

                     lighttpd

              应用程序服务器:

                     IIS

                     tomcat,jetty,jboss,resin

                     webshpere,weblogic

       httpd送往安装配置和使用:

              httpd:apache

                     a patchy server=apache

                     ASF:apache software foundation

              httpd的特性:

                     高度模块化:core+modules

                     DSO:dynamic shared object

                     MPM:multipath procession modules

                            prefork:多进程模型,每个进程响应一个请求

                                   一个主进程,负责生成n各子进程,子进程也被称为工作进程,每个子进程处理一个用户请求,即便没有 用户请求    

                                          也会提前生成多个空闲进程,随时等待进程的到来,最大不会超过1024个

                            worker

                            event

http协议:

     http/0.9,http/1.0,http/1.1,http/2.0

     http协议:stateless

          服务无法持续追踪访问者来源

               cookie,session

              

     http事务:

          请求:request

          响应:response

          报文语法格式:

               request报文

                    <method><request-URL> <version>

                    <headers>

                    <entity-body>

               response报文

                    <version> <status> <reason-phrase>

                    <headers>

                    <entity-body>

               method:请求方法,标明客户端希望服务器对资源执行的动作

                    GET、HEAD、POST

               version:

                    HTTP/<major>.<minor>

               status:

                    三位数字,如200,301,302,404,502,标记请求处理过程中发生的情况

               reason-phrase:

                    状态码所标记的状态的简要描述

               headers:

每个请求或响应报文可包含任意各首部,每个首部都有首部名称,后面跟一个冒号,再跟一个可选空格,接着是一个值

               entity-body:请求时附加的数据或响应时附加的数据

          method(方法):

               GET:从服务器获取一个资源

               HEAD:只从服务器获取文档的响应首部

               POST:向服务器发送要处理的数据

               PUT:将请求的主体部分存储在服务器上

               DELETE:请求删除服务器上指定的文档

               TRACE:追踪请求到达服务器中间经过的代理服务器

               OPTIONS:请求服务器返回对指定资源支持使用的请求方法

              

               协议查看或分析的工具:

                    tcpdump,tshark,wireshark

               status(状态码):

                    1XX:100-101,信息提示

                    2XX:200-206,成功

                    3XX:300-305,重定向

                    4XX:400-415,错误类信息,客户端错误

                    5XX:500-505错误类信息,服务器端错误

                    常用的状态码:

                         200:成功,请求的所有数据通过响应报文的entity-body部分发送OK

                   301:请求的URL直线的资源已经被删除,但在响应报文中通过首部Location指明了资源现在所处的新位置,Moved Permantently

                        302:与301相似,但在响应报文中通过Location指明资源现在所处的临时新位置,Found

                       304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端,Not Modified

                        401:需要输入装好和密码认证方能访问资源,Unauthorized

                        403:请求被禁止,Forbidden

                        404:服务器无法找到客户端请求的资源,Not Found

                        500:服务器内部错误,Internal Server Error

                        502:dialing服务器从后端服务器受到了一条伪响应,Bad gateway


               headers:

                    格式:

                         Name:Value

Content-Type

text/html; charset=utf-8


Content-Typetext/html;

 charset=utf-8

Cxy_all

baidu+c32a82d228d0caa092110a27f4a62f01

Date

Mon, 19 Mar 2018 04:01:50 GMT

Expires

Mon, 19 Mar 2018 04:01:50 GMT

Server

BWS/1.1

Set-Cookie

BDSVRTM=11; path=/ BD_HOME=0; …59; path=/; domain=.baidu.com

Strict-Transport-Security

max-age=172800

Transfer-Encoding

chunked

                    首部的分类:

                         通用首部

                         请求首部

                         响应首部

                         实体首部

                         扩展首部


                         通用首部:

                              Date:报文的创建时间

                              Connection:连接状态,如keep-alive,close

                              Via:显示报文经过的中间节点

                         请求首部:

                              Accept:通过服务器自己可接受的媒体类型

                              Accept-Charset:

                              Accept-Encoding:接受编码格式,如zip

                              Accept-language:接受的语言

                             

                              Client-IP

                              Host:请求的服务器名称和端口号

                              Referer:包含当前正在请求的资源的上一级资源

                              User-Agent:客户端代理

                              条件式请求首部:

                                   Expect:

                                    If-Modified-Since:自从指定时间之后,请求的资源是否发生过修改

                                    If-Unmodified-Since:

                                    If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的ETag不匹配

                                    If-Match:

                                     安全请求首部:

                                            Authorization:向服务器发送认证信息,如账号和密码

                                            Cookie:客户端向服务端发送cookie

                                            Cookie2:

                                     代理请求首部:

                                          Proxy-Authorization:向代理服务器认证

                                     响应首部:

                                          信息性:

                                           Age:响应持续时长

                                           Server:服务程序软件名称和版本

                                     协商首部:某资源多种表示方法时使用

                                       Accept-Ranges:服务器可接受的请求范围类型

                                       Vary:服务器查看的其他首部列表

                                    安全响应首部:

                                       Set-Cookie:向客户端设置cookie

                                       Set-Cookie2:

                                       WWW-Authenticate:来自客户端的对客户端的质询认证表单

                                    实体首部:

                                       Allow:列出此实体可使用的请求方法

                                       Location:告诉客户端真正的实体位于何处

                                  

                                       Content-Encoding

                                       Content-Language:

                                       Content-Length:主体的长度

                                       Content-Location:实体真正所处位置

                                       Content-Range:

                                       Content-Type:主体的对象类型    

缓存相关:

     ETag:实体的扩展标签

     Expores:实体的过期时间

    Last-Modified:最后一次修改的时间


httpd(2):

       centos 6:2.2

       centos 7:2.4

       安装方式:

              rpm

              编译安装:

       centos 6:

              程序环境

                     配置文件:

                            /etc/httpd/conf/httpd.conf

                            /etc/httpd/conf.d/*.conf

                     服务脚本:

                            /etc/rc.d/init.d/httpd

                            配置文件:

                                   /etc/sysconfig/httpd

                     主程序文件:

                            /usr/sbin/httpd

                            /usr/sbin/httpd.event

                            /usr/sbin/httpd.worker

                           

                     日志文件:

                            /var/log/httpd

                            access_log:访问日志

                            error_log:错误日志

                           

                     站点文档目录:

                            /var/www/html

                           

                     配置文件的组成:

                            grep "SEssion" /etc/httpd/conf/httpd.conf

                            ### Session 1:global senvironment

                            ### Sesison 2:'main' server configuration

                            ### Session 3:virtual hosts

                           

                            配置格式:directive value

                                   directive:不区分大小写字符

                                   value:为路径时,取决于文件系统

                     常用配置:

                            1.修改监听的IP和port

                                   Listen [IP:]port

                                          /etc/httpd/conf/httpd.conf文件中修改  

                                   省略IP表示监听本机所有IP,Listen可重复出现多次

                            2.持久连接

                                persistent connection:连接建立,每个资源获取后不会断开连接,而是继续等待其他的请求完成

                                          如何断开?

                                                 数量限制:100

                                    副作用:对并发访问控制量较大的服务器,持久连接功能网会使用某些请求得不到响应

                                          折中:使用较短的持久连接时间

                                                 httpd-2.4 支持毫秒级持久时间

                                         

                                   非持久连接      

                                   KeepAlive On|Off

                                   MaxKeepAliveRequests #

                                   KeepAliveTimeout #

                                  

                                   测试:

                                          telnet host post

                                          GET ?URL HTTP/1.1

                                          Host:hostname or ip

                           

                            3.MPM

                                   Multipath process module:多道处理模块

                                          prefork,worker,event

                                         

        httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个:rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持

                                   确认方法:

                                          ps aux | grep httpd

                                   默认为/usr/sbin/httpd,其使用prefork

                                          查看编译的模块列表:

                                                 # httpd -l

                                                 Compiled in modules:

                                                   core.c

                                                   mod_so.c

                                                   http_core.

                                          查看静态编译及动态装载的模块:

                                                 # httpd -M

                                          更换使用的httpd程序

                                                 /etc/sysconfig/httpd文件中

                                                 HTTPD=

                                                

                                                

                                                 配置所选用的MPM的属性


                                                        安装完默认使用prefork模型

                                                               StartServers 8 #服务启动后默认开启的进程数

                                                               MinSpareServers 5 #最少空闲进程数

                                                               MaxSpareServers 20 #最多空闲进程数

                                                               ServerLimit 256 #每个进程允许开启最多的子进程数

                                                               MaxClients 256 #每个进程最多用户链接数

                                                               MaxRequestsPerChild 4000 #长连接时每个用户最多请求数

                                                       

                                                        worker模型:要支持worker模型需要配置/etc/sysconfig/httpd,开启以下行:

                                                               HTTPD=/usr/sbin/httpd.worker

                                                               StartServers 4 #服务启动默认开启的进程数

                                                               MaxClients 300 #最多同时客户连接数

                                                               MinSpareThreads 25 #最少空闲进程数

                                                               MaxSpareThreads 75 #最好空闲进程数

                                                               ThreadsPerChild 25 #每个进程开启的线程数

                                                               MaxRequestsPerChild 0

                                                        配置服务器支持keep-alived(长连接)

                                                               KeepAlive {On|Off} #是否支持长连接

                                                               KeepAliveTimeout 2 #长连接超时时间

                                                               MaxKeepAliveRequests 50 #超时时间内允许请求的次数

                                          重启服务生效      

                                         

                                   PV,UV

                                          PV:page view

                                          UV:user view

                                                 独立IP量 

                                                 300*86400=40W+

                            4.DSO

                                   配置指令实现模块加载

                                          LoadModule <mod_name> <mod_path>

                                          模块路径可使用相对地址

                                                 相对于serverroot(/etc/httpd)指向的路径而言

                                                        /etc/httpd.modules/  

                            5.定义'Main' server的文旦页面路径

                                   DocumentRoot指向的路径为URL路径的起始位置

                                          Document "/var/www/html"

                                                 test/index.html-->http://host:port/test/index.html

                            6.站点访问控制

                                   可基于两种类型的路径指明对那些资源进行访问控制

                                          文件系统路径:

                                                 <Directory ""> </Directory>

                                                 <File ""></File>

                                                 <FileMatch ""></FileMatch>

                                          URL路径:

                                                 <Location ""></Location>

                                                 ...

                                   访问控制机制:

                                          基于来源IP地址:

                                          基于用户账号:

                            7.Directory中"基于来源地址"实现控制访问

                                   (1)options

                                                 所有可用特性:index includes FollowSymLinksOwnerMatch execCGI MultiViews

                                                 index索引:

                                                 followSymLinks:允许跟踪符号链接文件       

                                   (2)基于来源地址的访问控制机制

                                          order:检查次序

                                                 order allow,deny

                                                 order deny,allow

                                          allow from

                                          deny from

                                          来源地址:

                                                 IP

                                                 NetAddr:

                                                        172.16

                                                        172.16.0.0

                                                        172.16.0.0/16

                                                        172.16.0.0/255.255.0.0

                                                        可以使用通配符

                                         

                            8.定义默认主页面

                            DirectoryIndex index.html .var

                            9.日志设定

                                   错误日志:

                                          ErrorLog log/error_log

                                          LogLevel warn

                                          debug,info,notice,warn,error,crit,alert,emerg

                                   访问日志:

                                          customer

                                          LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

                                          %h:客户端IP地址

                                          %l:Remote logname (from identd, if supplied). -表示为空

                                         %u:Remote user,(from auth,May be bogus if return status (%s) is 401 (unauthorized))

                                          %t:Time the request was received,服务器接收到请求的时间

                                          %r:First line of request.请求报文的首行信息

                                          %s:响应状态码

                                          %b:Size of response in bytes,响应报文的大小,单位是字节,不包括响应报文首部

                                         %{VARNAME}i:请求报文当中“referer”首部的值,当前资源的访问入口,即从哪个页面中的超链接跳转而来。

                                         %{User-Agent}i:请求报文中“User-Agent”首部的值,即发出请求用到的应用程序

                                         

                            10.路径别名

                                   DocumentRoot "/www.htocs"

                                          http://www.magedu.com/download/bash.rpm

                                          -->/www/htocs/download/bash.rpm

                                         

                                   Alias /URL/ "path/to/somedir/"

                                          Alias /bbs/  "forum/htdocs"

                                                 http://www.magedu.com/bbs/index.html

                                                        -->/forum/htdocs/bbs/            

                            11.设定默认字符集

                                   AddDefaultCharset UTF-8

                                          GBK,GB2312,GB18030

                            12.基于用户的访问控制

                                   认证质询:

www-Authenticate:响应码为401,拒绝客户点请求,并说明客户端提供账号和密码

                                   认证:

Authorization:客户端用户填入账号和密码后再次发送请求报文,认证通过则服务器端发送响应资源

                                          认证类型:

                                                 basic:明文

                                                 digest:消息摘要

                                   安全域:

                                          需要认证后方能访问的路径

                                          应该通过形成对其进行标识,并用于改制用户认证的原因

                                   用户的账号和密码存储于何处:

                                          虚拟账号,仅用于访问服务时用到的认证标识

                                          存储:

                                                 文本文件

                                                 SQL数据库

                                                 ldap

                                                 nis

                                   basic认证:

                                          (1)定义安全域

                                                 <Directory "">

                                                        Options None

                                                        AllowOverride None

                                                        AuthType Basic

                                                        AuthName "string"

                                                        AuthUserFile "path/to/HTTPD_user_passwd_file"

                                                        Require user username1 username2 ...

                                                 </Directory>      

                                          (2)提供账号和密码存储(文本文件)

                                                 使用htpasswd命令进行管理

                                                 htpassws [options] passwordfile username

-c:自动创建passwordfile,因此,仅应该在添加第一个用户时使用

                                                        -m:md5加密用户密码

                                                        -s:shal加密用户密码

                                                        -D:删除指定用户

                                          (3)基于组进行认证

                                                        <Directory "">

                                                               Options None

                                                               AllowOverride None

                                                               AuthType Basic

                                                               AuthName "string"

                                                               AuthUserFile "path/to/HTTPD_user_passwd_file"

                                                               AuthGroupFile "path/to/HTTPD_GROUP_file"

                                                               Require group group1 group2 ...

                                                        </Directory>      

                                                        要提供用户账号文件和组文件

                                                       

                           

                            13 虚拟主机

                                   有三种实现方案:

                                          基于ip:

                                                 为每个虚拟主机准备至少一个ip地址

                                          基于port:

                                                 为每个虚拟主机准备至少一个专用port,实践中很少使用

                                                

                                          基于hostname

                                                 为每个虚拟主机尊卑至少一个专用hostname

                                          可混合使用上述三种方式中 任意方式:

                                   注意:

一般虚拟主机莫与中心主句混用,所以,要使用虚拟主机,先禁用中心主机

                                                 禁用中心主机:注释DocumentRoot

                                                

                                   每个虚拟主机都有专用配置:

                                          <VirtualHost "IP:PORT">

                                                 ServerName

                                                 DocumentRoot ""

                                          </VirtualHost>      

                                         

                                                 ServerAlias:虚拟主机的别名:

                                                        ErrorLog

                                                        CustomLog

                                                        <Directory "">

                                                        </Directory

                                         

                                          示例1:基于ip

                                                 <VirtualHost 172.16.100.6:80>

                                                        ServerName web1.magedu.com

                                                        DocumentRoot "/vhosts/web1.htdocs"

                                                 </VirtualHost>      

                                                 <VirtualHost 172.16.100.7:80>

                                                        ServerName web2.magedu.com

                                                        DocumentRoot "/vhosts/web12.htdocs"

                                                 </VirtualHost>

                                                 访问通过172.16.100.6:80和172.16.100.7:80

                                                

                                          示例2:基于port

                                                 <VirtualHost 172.16.100.6:80>

                                                        ServerName web3.magedu.com

                                                        DocumentRoot "/vhosts/web3.htdocs"

                                                 </VirtualHost>

                                                 <VirtualHost 172.16.100.6:8080>

                                                        ServerName web4.magedu.com

                                                        DocumentRoot "/vhosts/web4.htdocs"

                                                 </VirtualHost>

                                                 访问通过172.16.100.6:80和172.16.100.6:8080

                                                

                                          示例3:基于hostname

                                                 <VirtualHost 172.16.100.6:80>

                                                        ServerName web1.magedu.com

                                                        DocumentRoot "/vhosts/web1.htdocs"

                                                 </VirtualHost>

                                                 <VirtualHost 172.16.100.6:80>

                                                        ServerName web2.magedu.com

                                                        DocumentRoot "/vhosts/web2.htdocs"

                                                 </VirtualHost>

                                                 <VirtualHost 172.16.100.6:80>

                                                        ServerName web3.magedu.com

                                                        DocumentRoot "/vhosts/web3.htdocs"

                                                 </VirtualHost>

                           




                            14.内置的status页面

                                   <Location /Server-status>

                                          Sethandler server-status

                                          Order deny,allow

                                          Deny from all

                                          Allow from 172.16

                                   </Location>

                                   基于账号实现访问控制

     

httpd-2.2

     curl命令:

          curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。

     curl [options] [URL...]

     curl的常用选项:

          -A/--user-agent <string> :设置用户代理发送给服务器

              -basic使用HTTP基本认证

          --tcp-nodelay使用TCP——NODELAY选项

          -e/--referer:来源网址

     用法curl [options] [URL…]

     另一个工具elinks

    


     SSL会话简化过程

    (1)客户端发送可供选择的加密方式,并向服务器请求证书

    (2)服务器端发送证书以及选定的加密方式给客户端

    (3)客户端取得证书并进行证书验证

        如果信任给其发证书的CA

        (a)验证证书来源的合法性,用CA的公钥解密证书上数字签名    

        (b)验证证书的内容的合法性完整性验证

        (c)检查证书的有效期限

        (d)检查证书是否被吊销

        (e)证书终于拥有者的名字与访问的目标主机要一致

    (4)客户端生成临时会话秘钥(对称秘钥),并使用服务器端的公钥加密此数据发送给服务器,完成秘钥交换

    (5)服务器用此秘钥加密用户请求的资源响应给客户端

        注意SSL会话是基于IP地址创建所以单IP的合租记上仅可以使用一个https虚拟主机

配置httpd支持https

(1)为服务器申请数字证书

测试通过私建CA发证书

(a)创建私有CA

(b)在服务器创建证书签署请求

(c)CA签证

(2)配置httpd支持使用ssl,及使用的证书

yum –y install mod_ssl

配置文件:/etc/httpd/conf.d/ssl.conf

     DocumentRoot

ServerName

  SSLCertificateFile

  SSLCertificateKeyFile




                    

                           

                           

                           

                           

                           

                           

                           

                           

                           

                           

                           

                           

                           


猜你喜欢

转载自blog.csdn.net/matengbing/article/details/80276872