第一部分  HTTP服务应用详解

一、HTTP协议简介

   HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从Web服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。因此HTTP事务是由一个请求以及与其对应的响应报文组合起来的。

HTTP协议的主要特点:

1、支持客户/服务器模式。

2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。

3、灵活:HTTP允许传输任意类型的数据对象。

4、无连接:无连接的含义是限制每次连接只处理一个请求。

5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。

二、HTTP服务的请求方法

GET:客户端从服务器获取资源,客户端发出的为完整的请求。

    PUT:客户端向指定资源位置上传其最新内容。

    DELETE:请求服务器删除Request-URI所标识的资源。

    HEAD:客户端仅请求响应首部,则服务器只返回响应的首部。

    POST:向指定资源提交数据进行处理请求,如提交表单。

    OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。

    TRACE:追踪一个资源请求中间所经过的代理。

三、HTTP协议的报文格式

   1、起始行

   2、首部:Host

   3、主体

  请求报文格式:Request

<method>   <request-URL>   <version>
#请求方法   请求资源路径    所使用HTTP协议版本
 <headers>
#标题、头文件
 <entity-boday>
#实体主题


响应报文格式:Response

<version>   <status>   <reason-phrase>
#版本       状态码      原因管理
 <headers>
#标题、头文件
 <entity-boday>
#实体主题

四、HTTP的报文首部

  1、通用首部:请求和相应均可使用

# connection  指定连接
# date  报文创建时间
# via  所经过的代理服务器

2、请求首部:只能用于请求

# Host  所请求的主机
# Referer  提供的包含当前请求URI文档的URL
# Accept  接受的MIME类型
# Accept-Charset  接受的字符集
# Accept-Encoding  接受的编码
# Accept-Lanague  告诉服务器能够发送哪些语言

  ①条件请求首部

  If-Modified-since 控制缓存

  If-none-match

  ②安全请求首部

  Authorization  客户端提供给服务器的认证信息

  cookie(cookie2)  追踪用户连接

  3、响应首部

# Age  响应时间
# Pulic  可存于公共缓存
# Server  服务器软件的名称及版本
# Vary  响应变化,会影响缓存
# Set-cookie(cookie2) 设定cookie

  4、实体首部

# Allow  允许的请求方法
# Location  资源的实际位置
# Content_Lanague  主体内容的语言
# Content_Location  主体内容所处的位置
# Content_Type MIME  主体内容类型
# Etag  实体标记
# Expires  过期缓存
# Last-Mofified 上次修改时间


五、HTTP事务流程

   ① 建立连接

   ② 接受请求

   ③ 处理请求

   ④ 获取资源

   ⑤ 构建响应

   ⑥ 回送响应

   ⑦ 记录日志

第二部分  HTTP的相关配置

一、httpd软件的相关信息

   1、服务脚本:/etc/rc.d/init.d/httpd

   2、运行记录: /etc/httpd

   3、配置文件

      Ⅰ 主配置文件:/etc/httpd/conf/httpd.conf

      Ⅱ 扩展配置文件:/etc/httpd/conf.d/*.conf

   4、网页文件目录(DocumentRoot): /var/www/html

   5、默认主页面:index.html

211836941.png

二、配置httpd的工作属性

   1、指令不区分字符大小写,但一般情况下,单词的首字母大写;指令的值要区分大小写;有些指令可以重复使用多次。

   2、配置文件的构成

    Ⅰ 主服务器不能和虚拟主机同时启用

    Ⅱ 全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身的工作属性

    Ⅲ 主服务器:主站的属性

    Ⅳ 虚拟主机:虚拟主机及其属性定义

   3、配置文件的语法测试

# service httpd configtest
# httpd -t

211738217.png

  大多数配置修改后,使用 service httpd reload 既能生效,而修改过监听的地址或端口的文件通常需要重启服务 service httpd restart 。

   4、配置监听的端口和地址

# Listen    [ IP: ] PORTsan

211759235.png

三、配置所选的MPM(多道处理模块)

   1、prefork: 一个进程响应一个请求,linux中默认使用

     Ⅰ 绑定特权端口

     Ⅱ 派发和回收子进程

     Ⅲ 读取并分析主配置文件

220347325.png

   2、worker: 一个进程生成多个线程,一个线程响应一个请求

220418205.png

   3、event: 测试模式 (勿使用)

   4、配置使用编译进不同的MPM的httpd 编辑配置文件 /etc/sysconfig/httpd

   5、配置加载的模块

# LoadModule foo_module modules/mod_foo.sosui

212229539.png

四、配置服务器支持 keep-alived

# KeepAlive {on|off}
 on 空闲时使用,off 繁忙时使用
# KeepAlive TimeOut
 最多允许连接时间
# MaxKeepAliveRequests
 每次最大的资源请求次数

1)KeepAlive {on|off}

212715424.png

2)KeepAlive TimeOut

212827884.png

3)MaxKeepAliveRequests

212947284.png


五、配置站点的根目录


1、DocumentRoot ""

  <Directory "FS_PATH">

   </Directory>

# DocumentRoot " "
指定配置网页文件目录路径
# <Directory FileSystem_PATH>
# </Directory >

 Userdir:让每个人都拥有个人站点:http://HOST/~username

 UserDir Public_html

215451775.png

 访问文件的配置文件及访问结果

215756505.png

215813776.png

215843138.png

 2、<Location "URL">

    </Location>

222721502.png


六、配置页面文件访问属性

# <Directory "FS_PATH">
# Options
# Indexes
 是否允许索引页面文件,建议关闭
# FollowSymLinks
 是否允许跟随软连接
# ExecCGI
 是否允许执行CGI脚本
# All
# None

221240430.png

七、配置日志功能

  1、日志有两类:访问日志和错误日志,而访问日志的格式需要自定义

  2、错误日志

# ErrorLog "/path/to/error_log_file"

221715105.png

  3、访问日志

# CustomLog /path/to/Custom_Log_File LOGTORMAT

221732467.png

八、配置访问控制

  1、基于客户端(IP)的访问控制

    order:定义allow和deny哪一个为默认法则,写在后面的为默认法则,写在前面的指令没有显示定义的即受后面的指令控制。

# Order allow,deny
# Allow from All

222652132.png

2、基于用户的访问控制

# DocumentRoot " "
# <Directory  "/path/to/DocumentRoot_SUBDIR">
# Options None
# AllowOverride    是否允许覆盖
# AuthName "Realm"  用户名称
# AuthType Basic    认证类型
# AuthUserFile /path/to/passwords   用户账号文件
# Require username   本账号允许登录的用户
# AuthGroupFile   用户组文件
# Require grpname  本账号允许登录的用户组
# </Directory>


九、配置虚拟主机

  1、虚拟主机的类型

      Ⅰ 基于端口的虚拟主机

215646934.jpg

215646489.jpg

215647331.jpg

215647571.jpg



      Ⅱ 基于IP的虚拟主机

215822239.jpg

215822747.jpg

215823124.jpg

215823707.jpg



     Ⅲ 基于主机名的虚拟主机

220010500.jpg

220012466.jpg

220014512.jpg

220015845.jpg

220016785.jpg



  2、每个虚拟主机的定义

# <VirtualHost IP:PORT>
  指定虚拟主机的IP、端口
#  ServerName
  指定虚拟主机的主机名
# DocumenRoot " "
  指定虚拟主机的站点路径
# </VirtualHost>

3、每个虚拟主机的单独配置


<VirtualHost IP:80>
  ServerName
  Document " "
  CustomLog
  ErrorLog
  <Directory "">
     Options None
     AllowOverride Authconfig
     AuthName " "
     AuthType Basic
     Require Vaild-user
  </Directory>
  ScriptAlias /cgi-bin/
  Alias
</VirtualHost>