Apache全解(四)_工作模式与配置文件

By | 2019年 11月 23日

HTTP服务器应用

  • http服务器程序
    httpd apache
    nginx
    lighttpd
  • 应用程序服务器
    IIS .asp
    tomcat .jsp
    jetty 开源的servlet容器,基于Java的web容器
    Resin CAUCHO公司,支持servlets和jsp的引擎
    webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle)
  • 市场占有率统计
    www.netcraft.com

Httpd介绍

20世纪90年代初,国家超级计算机应用中心NCSA开发
1995年开源社区发布apache(a patchy server)
ASF: apache software foundation
FSF:Free Software Foundation

  • 特性:
    1. 高度模块化:core + modules
    2. DSO:Dynamic Shared Object 动态加/卸载
    3. MPM:multi-processing module多路处理模块

MPM工作模式

  1. prefork: 多进程I/O模型,每个进程响应一个请求,默认模型
    • 一个主进程:生成和回收n个子进程,创建套接字,不响应请求
    • 多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个
  2. worker: 复用的多进程I/O模型,多进程多线程,IIS使用此模型
    • 一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n
  3. event: 事件驱动模型(worker模型的变种)
    • 一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的监控线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力
在这里插入图片描述

Prefork MPM

Prefork MPM: 预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发1024,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景。
==优点:== 稳定
==缺点:== 慢,占用资源,不适用于高并发场景

worker MPM

在这里插入图片描述

worker MPM:是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。
==优点:== 相比prefork 占用的内存较少,可以同时处理更多的请求
==缺点:== 使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)

在这里插入图片描述

#event MPM

event MPM

  1. event MPM:Apache中最新的模式,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力
  2. event只在有数据发送的时候才开始建立连接,连接请求才会触发工作线程,即使用了TCP的一个选项,叫做延迟接受连接TCP_DEFER_ACCEPT,加了这个选项后,若客户端只进行TCP连接,不发送请求,则不会触发Accept操作,也就不会触发工作线程去干活,进行了简单的防攻击(TCP连接)

==优点:== 单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放
==缺点:== 没有线程安全控制

httpd功能特性

  1. 虚拟主机: IP、Port、FQDN
  2. CGI:Common Gateway Interface,通用网关接口
  3. 反向代理
  4. 负载均衡
  5. 路径别名
  6. 丰富的用户认证机制
    basic 、 digest
  7. 支持第三方模块

httpd-2.4新特性

  1. MPM支持运行为DSO机制;以模块形式按需加载
  2. event MPM生产环境可用
  3. 异步读写机制
  4. 支持每模块及每目录的单独日志级别定义
  5. 每请求相关的专用配置
  6. 增强版的表达式分析式
  7. 毫秒级持久连接时长定义
  8. 基于FQDN的虚拟主机不需要NameVirutalHost指令
  9. 新指令,AllowOverrideList
  10. 支持用户自定义变量
  11. 更低的内存消耗

Httpd 安装

  1. 版本:
    CentOS 6: 2.2
    CentOS 7: 2.4
  2. 安装方式:
    rpm:centos发行版,稳定,建议使用
    编译:定制或特殊需求

Httpd 程序环境

  1. CentOS 7程序环境:httpd-2.4
    配置文件:
    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf.d/*.conf
  2. 检查配置语法:
    httpd –t
  3. 服务单元文件: /usr/lib/systemd/system/httpd.service
  4. 配置文件:/etc/sysconfig/httpd
  5. 服务控制和启动:
    systemctl enable|disable httpd.service
    systemctl {start|stop|restart|status|reload} httpd.service
  6. 站点网页文档根目录:
    /var/www/html
  7. 模块文件路径:
    /etc/httpd/modules
    /usr/lib64/httpd/modules
  8. 主程序文件:
    /usr/sbin/httpd
  9. 主进程文件:
    /etc/httpd/run/httpd.pid
  10. 日志文件目录:
    /var/log/httpd
    access_log: 访问日志
    error_log:错误日志
  11. 帮助文档包:
    httpd-manual

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注