http 简介以及 httpd 的特性与配置介绍

Web Server

http 与 https 都处于应用层,但他们都需要经由底层的 TCP/IP 协议簇,来完成协议报文的传输。

IANA(Internet Assigned Numbers Authority)即互联网号码分配局,下面的网址即可查看协议端口的分配:
https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml

  • 0-1023:众所周知,永久地分配给固定的应用使用,特权端口;
  • 1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用
  • 41952+:客户端程序随机使用的端口,动态端口,或私有端口;其范围定义在文件 /proc/sys/net/ipv4/ip_local_port_range 中

http 简介

http:hyper text transfer protocol,超文本传输协议,应用层协议 80/tcp。http 的一次事务即客户端的请求与服务端的响应,同时他也是用户和网站间请求和响应的标准。
我们的客户端向服务器端指定的 80 端口发送请求,而处在监听状态的服务器一旦收到请求,便会响应客户端所请求的响应资源,并返回一个状态,如常见的 404 Not Found。

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

  • GET:从服务器获取一个资源
  • HEAD:只从服务器获取文档的响应首部
  • POST:向服务器发送要处理的数据
  • PUT: 将请求的主体部分存储在服务器上
  • DELETE:请求删除服务器上指定的文档
  • TRACE:追踪请求到达服务器中间经过的代理服务器
  • OPTIONS:请求服务器返回对指定资源支持使用的请求方法

status(状态码)

  • 1xx:100-101,信息提示
  • 2xx:200-206,成功
  • 3xx:300-305,重定向
  • 4xx:400-415,错误类信息,客户端错误
  • 5xx:500-505,错误类信息,服务器端错误

常用的状态码:
200:成功,请求的所有数据通过响应报文的entity-body 部分发送;OK
301:请求的 URL 指向的资源已经被删除;但在响应报文中通过首部 Location 指明了资源现在所处的新位置;Moved Permanently
302:与 301 相似,但在响应报文中通过 Location 指明资源现在所处临时新位置;Found
304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
401:需要输入账号和密码认证方能访问资源;Unauthorized
403:请求被禁止;Forbidden
404:服务器无法找到客户端请求的资源;Not Found
500:服务器内部错误;Internal Server Error
502:代理服务器从后端服务器收到一条伪响应;Bad Gateway

http 工作模式

http 请求报文即为 request,http 响应报文即为 response,一次 http 事务即为请求 <--> 响应

web resource (web 资源)分类:

  • 静态资源:无需服务端做出额外处理
  • 动态资源:服务端需要通过执行程序做出处理,发给客户端的是程序运行的结果
  • 注意:一个页面中展示的资源可能有多个;每个资源都需要单独请求

资源的标识机制,统一资源定位符 URLU(Uniform Resource Locator)用于描述服务器上某特定资源的位置;其格式如下:
Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]

一次完整的 http 请求的处理过程

  1. 建立或处理链接:接受请求或拒绝请求
  2. 接收请求:接收来自于网络上的主机请求报文中,对某一特定资源的一次请求过程
  3. 处理请求:对请求报文进行解析,或取客户端请求的资源及请求方法等相关信息
  4. 访问资源:获取请求报文中请求的资源
  5. 构建响应报文
  6. 发送响应报文
  7. 记录日志
接受请求的模型

并发访问响应模型:
单进程 I/O 模型:启动一个进程处理用户的请求;这意味着,一次只能处理一个请求,多个请求被串行响应
多进程 I/O 结构:由父进程并行启动多个进程,每个子进程响应一个请求
复用的 I/O 结构:一个进程响应多个请求,分为以下两种
;多线程模式:一个进程生成 n 个线程,一个线程处理一个请求
;事件驱动(event-driven):一个进程直接处理 n 请求
复用的多进程 I/O 结构:一个进程启动多个(m 个)进程,每个进程生成(n)个线程;响应的请求数量为 m*n

处理请求

服务器端分析 http 请求报文的首部,请求报文首部的格式如下:

<method> <URL> <VERSION>
HEADERs:(name:value)
<request body>

web 服务器,即存放了 web 资源的主机,负责向请求者提供对方请求的静态资源,或动态资源运行生成的结果;这些资源通常应该放置于文本文件系统某路径下;此路径称为 DocRoot。

http 请求处理中的链接模式:

  • 保持连接(长连接):keep-alive
  • 非保持连接(短连接)

http 服务程序

常见的 http 服务程序:httpd(apache),nginx,lighttpd
这次以介绍 ASF(apache software foundation )的 httpd 为主。

httpd 的特性

高度模块化:core + modules
DSO:dynamic shared object
MPM:Multipath processing Modules(多路处理模块),分为以下三种

  • prefork:多进程模型,每个进程响应一个请求:
    一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理。
    n 个子进程:每个子进程处理一个请求。
    工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲。
    注意:linux 的进程本身就很轻量级,与线程差不多,因此使用较多的为 prefork。

  • worker:多进程多线程模型,每个线程处理一个用户请求:
    一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理。
    多个子进程:每个子进程负责生成多个线程。
    每个线程:负责响应用户请求

  • event:事件驱动模型,多进程模型,每个进程响应多个请求:
    一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理。
    子进程:基于事件驱动机制直接响应多个请求。

htppd 的功能特性
  • CGI:Common Gateway Interface
  • 虚拟主机:
  • 反向代理
  • 负载均衡
  • 路径别名
  • 丰富的用户认证机制:basic 与 digest
  • 支持第三方模块

CentOS 7 上的 httpd-2.4

配置文件

rpm -qc httpfd命令进行相关配置文件的查找,大致分为以下三类:

  • /etc/httpd/conf/httpd.conf
  • /etc/httpd/conf.d/*.conf
  • /etc/httpd/conf.modules/*.conf

systemd unit file 路径为,执行命令locate httpd.service即可查看,
/usr/lib/systemd/system/httpd.service

查找主文件程序,执行命令which httpd,即为/usr/sbin/httpd

其日志文件为/var/log/httpd/下的 access_log 与 error_log 文件。

站点文档为/var/www/html

模块文件路径/usr/lib64/httpd/modules

那么现在先进行一个简单的页面显示吧,执行如下命令:

cd /etc/httpd/conf.d
sudo mv welcome.conf welcome.conf.bak
systemctl start httpd.service
cp /etc/issue /var/www/html
# 之后查看 ip 地址并输入浏览器即可

httpd-2.4 的常用配置

这里先放上官方文档 http://httpd.apache.org/docs/2.4/
其主配置文件为 /etc/httpd/conf/httpd.conf
其配置风格为 directive value指令 值的形式,同时 directive 不区分大小写。

常用配置说明

修改监听的 IP 和 Port

例如 # Listen 12.34.56.78:80 或是 Listen 80.
1)省略 IP 表示为 0.0.0.0
2)Listen 指令可重复出现多次
3)修改监听 socket,重启服务进程方可生效
4)限制其必须通过 ssl 通信时,protocol 需定义为 https

持久连接(长连接)

Persistent Connection:tcp 连续建立后,每个资源获取完成后不全断开连接,而是继续等待其他资源请求的进行。数量,时间一倒限制便会断开连接。

KeepAlive On|Off
KeepAliveTimeout 15
MaxKeepAliveRequest 100
MPM (Multipath processing Modules)

查看 httpd 程序的模块列表,参数 -h 可获取帮助信息:

  • -l:查看静态编译的模块
  • -M:查看静态编译及动态编译的模块
    prefork 的配置:
<IfMoudle Prefork.c>
StartServers  8
MinSPareServer  5
MaxPareServer  20
ServerLimit  256
....
<IfMoudle>
DSO (dynamic shared object)

配置指定实现模块加载LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径,相对于 ServerRoot(默认:/etc/httpd)

定义’Main’ server 的文档页面路径
ServerName
ServerAlias
DocumentRoot ""

文档路径映射:DocumentRoot 指向的路径为 URL 的起始位置,相当于站点 URL 的跟路径。

站点访问控制常见机制

可基于两种机制指明对哪些资源进行何种访问,文件系统路径与 URL 路径。

文件系统路径:
<Directory "">
...
</Directory>

<File "">
...
</File>

<FileMatch "PATTERN">
..
</FileMatch>

URL 路径:
<Location "">
...
</Location>

<LocationMatch "PATTERN">
...
</LocationMatch>
基于用户的访问控制

认证质询:WWW-Authenticate:响应码为 401,拒绝客户端请求,并说明要求客户端提供账号和密码。
认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,服务器发送响应的资源。认证方式有两种:basic(明文)与 digest(消息摘要认证)
安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识。

虚拟主机

IP 相同,但端口不同
IP 不同,但端口均为默认端口
FQDN 不同;

status 页面

LoadModule status_module modules/mod_status.so

user/group

主进程由 root 启动,子进程均为系统用户 apache,或者指定以哪个用户身份运行 httpd 服务进程:

User apache
Group apache

进程属主以及,父进程与子进程:
在这里插入图片描述

使用 mod_deflate 模块压缩页面优化传输速度

使用场景:
1、节约带宽,额外消耗 CPU;
2、压缩适于压缩的资源,例如文本文件

https, http over ssl
SSL 会话的简化过程
	1、客户端发送可供选择的加密方式,并向服务器请求证书
		2、服务器端发送证书以及选定的加密方式给客户端
		3、客户端取得证书并进行证书认证
			如果信任给其发放证书的 CA:
				a、验证证书来源的合法性;用 CA 的公钥解密证书上的数字签名
				b、验证证书的内容合法性;完整性验证
				c、检查证书的有效期限
				d、检查证书是否被吊销
				e、证书中拥有者的名字,与访问的目标主机要一直
		4、客户端生成临时会话秘钥(对称秘钥),并使用服务器的公钥加密次数据发送给服务器,完成秘钥交换
		5、服务器用此密钥加密用户请求的资源,响应给客户端

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

配置 httpd 支持 https:
1、为服务器申请数字证书
2、配置 httpd 支持使用 ssl,及使用的证书;yum -y install mod_ssl;配置文件:/etc/httpd/conf.d/ssl.conf

httpd 自带的工具程序

htpasswd:basic 认证基于文件实现时,用到的账号密码文件生成工具
apachectl:httpd 自带的服务控制脚本,支持 stop 和 start
rotatelogs:日志滚动工具
ab:apache bench

两个小工具

curl 命令:curl [options] [URL...]
-A/–user-agent 设置用户代理发送给服务器
-e/–referer 设置网页来源
-I/–head 只显示响应报文首部信息
–compressed 要求返回的是压缩格式

elinks 命令:elinks [OPTIONS]... [URL]...
-dump:不进入交互模式,而直接将 URL 内容输出至标准输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值