20170926 http服务和apache(一)

  • Socket 套接字
  • http服务介绍
  • httpd介绍

一、Socket 套接字

  • 在建立通信连接的每一端,进程间的传输要有两个标志:

    • IP地址和端口号,合称为套接字地址(socket address)
    • 客户机套接字地址定义了一个唯一的客户进程
    • 服务器套接字地址定义了一个唯一的服务器进程
  • Socket:套接字,进程间通信(IPC)的一种实现,允许位于不同主机(或同一主机)上不同进程之间进行通信和数据交换

    • Socket API:封装了内核中所提供的socket通信相关的系统调用
    • Socket Domain:根据其所使用的地址
      AF_INET:Address Family,IPv4
      AF_INET6:IPv6
      AF_UNIX:同一主机上不同进程之间通信时使用
    • Socket Type:根据使用的传输层协议
      SOCK_STREAM:流,TCP套接字,可靠地传递、面向连接
      SOCK_DGRAM:数据报,UDP套接字,不可靠地传递、无连接
      SOCK_RAW:裸套接字,无须TCP或UDP,应用直接通过IP包通信
    • Socket位于传输层与应用层之间,连接了应用层细节与通信细节,负责用户进程与系统内核的交互

二、http服务介绍

(一)http服务通信过程

(二)http相关术语

  • http(hyper text transfer protocol):超文本传输协议,TCP连接端口80

  • html(hyper text markup language):超文本标记语言,一种描述网页结构的编程语言

    • http与html的关系:http协议传输的文本文件依据使用的编程语言,可以分为html, css, javascript文件等
  • MIME(Multipurpose Internet Mail Extensions):多用途互联网邮件拓展,支持在互联网上传输各种格式的文件

    • 在文件/etc/mime.types中详细列举了支持的文件类型
    • 格式:major/minor ,一级类型/二级类型,如:
      text/html, image/jpeg, video/mp4

(三)http协议发展介绍

  • http/0.9,1991年发布,只有GET命令

  • http/1.0,1996年5月发布,增加了POST, HEAD命令

    • 支持cache, MIME, method
    • 每个TCP连接只能发送一个请求
    • 头信息是ASCII 码,后面数据可为任何格式
    • Content-Type字段说明数据格式,包含在MIME中
  • http/1.1(目前最普遍),1997年1月发布,新增命令PUT, PATCH, OPTIONS, DELETE

    • 持久连接(persistent connection):TCP连接默认不关闭,可以被多个请求复用
    • 管道机制(pipelining):同一个TCP连接里可以同时发送多个请求
    • 队头堵塞(Head-of-line blocking):服务器顺序处理请求,前方请求回应慢,造成很多请求排队
    • http协议不带状态,连接断开后服务器将失去客户端信息,每次请求需发送相同信息,浪费带宽
  • http/2.0,2015年发布,基于Google研发的spdy

    • 头信息和数据体都是二进制
    • 复用TCP连接:在一个连接里,客户端和浏览器都可以同时发送多个请求或回应
    • 引入头信息压缩机制(header compression),客户端和服务器同时维护一张头信息表,只发送索引号,提高速度
    • 服务器推送(server push):服务器未经请求,主动向客户端发送资源

(四)http工作机制

  • 事务:包含http请求和http响应

  • web资源:多个资源组成一个网页

    • 静态文件:无需服务端做出额外处理
      文件后缀:.jpg, .html, .txt, .js, .css, .mp3, .avi
    • 动态文件:服务端执行程序,返回执行的结果
      文件后缀:.asp, .php, .jsp
  • 提高HTTP连接性能的方法

    • 并行连接:通过多条TCP连接发起并发的HTTP请求
    • 持久连接:重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
    • 管道化连接:通过共享TCP连接发起并发的HTTP请求
    • 复用的连接:交替传送请求和响应报文(实验阶段)
  • 传统HTTP连接:串行连接,每个事务都需要建立和断开连接一次

  • 并行连接:同时进行多个事务,事务之间并行运行
  • 持久连接:一个连接过程依次完成多个事务,减少了建立和断开连接的时间
  • 管道连接:一个连接过程同时进行多个事务,进一步减少了时间开销

(五)URI

  • URI(Uniform Resource Identifier):统一资源标识,分为URN和URL

    • URN(Uniform Resource Naming):统一资源命名,用于给资源定义一个唯一的命名
    • URL(Uniform Resource Locator):统一资源定位,用于描述某服务器某特定资源的位置
  • URL的组成:
    <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

    • scheme:方案,指定连接服务器使用的协议
    • user:用户名
    • password:密码
    • host:服务器的主机名或IP地址
    • port:端口号
    • path:服务器资源本地名
    • params:参数,参数为名/值对,多个参数用";"分隔
    • query:查询,用"?"分隔,多个查询用"&"分隔
    • frag:片段,在客户端使用,用"#"分隔

(六)网站访问量:

  • IP(Internet Protocol):独立IP,一天内来自相同客户机IP地址只计算一次,记录远程客户机IP地址的计算机访问网站的次数

  • PV(Page View):访问量,用户每次刷新页面即被计算一次,反映浏览某网站的页面数

  • UV(Unique Visitor):独立访客,一天内相同的客户端只被计算一次,访问某网站的电脑数量,网站通过来访电脑的cookies实现判断来访电脑的身份

(七)Web服务器处理请求过程

(1)建立连接:

接收或拒绝连接请求

(2)接收请求:

接收客户端请求报文中对某资源的一次请求的过程

Web访问响应模型(Web I/O)

  • 单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,串行响应多个请求
  • 多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
  • 复用I/O结构:启动一个进程,同时响应N个连接请求
    • 实现方法:多线程模型和事件驱动
    • 多线程模型:一个进程生成N个线程,每线程响应一个连接请求
    • 事件驱动:一个进程处理N个请求
  • 复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求
(3)处理请求:

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法、资源、首部和可选的主体部分对请求进行处理

  • HTTP常用请求方法
    GET, POST, HEAD, PUT, DELETE, TRACE, OPTIONS
(4)访问资源:

服务器访问web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

  • web服务器资源路径映射方式:
    • docroot
    • alias
    • 虚拟主机docroot
    • 用户家目录docroot
(5)构建响应报文:

服务器执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体。

  • 响应报文通常包括:

    • Content-Type:响应首部元素,描述响应主体的MIME类型
    • Content-Length:响应首部元素,描述响应主体的长度
  • 识别MIME类型的策略:

    • 魔法分类:服务器扫描资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配
    • 显示分类:强制特定文件或目录内容拥有某个MIME类型
    • 默认先根据文件的后缀名判断MIME类型,如果没有后缀名再通过魔法分类识别
(6)发送响应报文:

对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态。

(7)记录日志:

当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务

(八)http服务器应用

  • http服务器程序
    httpd apache
    nginx
    lighttpd
  • 应用程序服务器
    IIS .asp
    tomcat .jsp
    jetty 开源的servlet容器,基于Java的web容器

三、httpd介绍

(一)httpd发展

  • 20世纪90年代初,国家超级计算机应用中心NCSA开发
  • 1995年开源社区发布apache
  • ASF(apache software foundation):维护httpd的社区组织,并主导开发了很多开源软件项目

(二)httpd特性

  • 高度模块化:core + modules
  • DSO(Dynamic Shared Object):动态加/卸载模块
  • MPM(multi-processing module):多路处理模块

(三)MPM工作模式

  • prefork:多进程I/O模型,每个进程响应一个请求,默认模型

    • 一个主进程:生成和回收n个子进程,创建套接字,不响应请求
    • 多个子进程:工作进程,每个子进程处理一个请求;
    • 系统初始时,预生成多个空闲进程用于等待请求,最多不超过1024个
  • worker:复用的多进程I/O模型,多进程多线程

    • 一个主进程:生成m个子进程
    • 每个子进程负责生成n个线程,每个线程响应一个请求,故能够并发响应m*n个请求
    • 比prefork模式节约资源,但一个线程出错会影响所在进程的其他线程
  • event:事件驱动模型(worker模型的变种)

    • 一个主进程:生成m个子进程
    • 每个子进程负责生成n个线程,每个线程响应一个请求,故能够并发响应m*n个请求,
    • 有专门的线程来管理keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放
    • 这样增强了高并发场景下的请求处理能力
    • httpd-2.2的event为测试版,httpd-2.4的event为稳定版

(四)httpd功能特性

  • 虚拟主机:一台服务器搭建多个网站
    IP、Port、FQDN
  • CGI(Common Gateway Interface):通用网关接口,动态程序
  • 反向代理
  • 负载均衡
  • 路径别名
  • 丰富的用户认证机制
    basic
    digest
  • 支持第三方模块

(五)httpd-2.2程序(CentOS 6 默认)环境

  • 配置文件:
    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf.d/*.conf
  • 检查配置语法:
    httpd -t
    service httpd configtest
  • 服务脚本:/etc/rc.d/init.d/httpd
    脚本配置文件:/etc/sysconfig/httpd
  • 服务控制和启动:
    chkconfig httpd on|off
    service httpd {start|stop|restart|status|configtest|reload}
  • 站点网页文档根目录:
    /var/www/html
  • 模块文件路径:
    /etc/httpd/modules --> /usr/lib64/httpd/modules
  • 主程序文件:
    /usr/sbin/httpd
    /usr/sbin/httpd.worker
    /usr/sbin/httpd.event
  • 主进程文件:
    /etc/httpd/run/httpd.pid
  • 日志文件目录:
    /var/log/httpd
    access_log:访问日志
    error_log:错误日志
  • 帮助文档包:
    yum install httpd-manual
  • 实验:启动httpd服务出现警告信息"httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName",消除此条警示

编辑配置文件,编辑ServerName行,修改服务器域名后重启httpd服务警告消失

vim /etc/httpd/conf/httpd.conf
ServerName www.hellopeiyang.com:80
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • http协议及Apache服务 http协议 什么是http? http全称为超文件传输协议(Hyper text...
    魏镇坪阅读 2,244评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 1,959评论 0 7
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,344评论 0 35
  • http-2.2常见配置http协议curl和elinks工具 一、http-2.2常见配置 httpd配置文件的...
    哈喽别样阅读 648评论 0 1