千家信息网

Apache三种工作模式及目录属性讲解

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Apache工作模式介绍1.Apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件2.其工作模式有许多种,源码包安装httpd时可查看httpd-mpm.conf文件,该文件位于extr
千家信息网最后更新 2026年10月31日Apache三种工作模式及目录属性讲解

Apache工作模式介绍

1.Apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件
2.其工作模式有许多种,源码包安装httpd时可查看httpd-mpm.conf文件,该文件位于extra/conf目录中
3.目前主要有两种模式:
event模式:一个进程中包含多个线程
prefork模式:一个进程中包含一个线程
worker模式:一个进程中包含多个线程

event工作模式介绍:

1.event是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题
2.event工作模式在遇到某些不兼容的模块时,会失效,将会回退到worker模式
3.event工作模式需要Linux系统(Linux 2.6+)对epoll的支持,才能启用。需要补充的是HTTPS的连接(SSL)
4.在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程
5.当有真实请求过来的时候,将请求传递给服务器的线程执行完毕后,又允许它释放
6.这样, 一个线程就能处理几个请求了 ,实现了 异步非阻塞。这增强了在高并发场景下的请求处理

event参数讲解

在httpd-mpm.conf配置文件中,以下是prefork模块的定义:
  StartServers      3  MinSpareThreads       75  MaxSpareThreads       250  ThreadsPerChild       25  MaxRequestWorkers     400  MaxConnectionsPerChild  0

参数说明:

参数说明
StartServers服务启动时初始的进程数,默认3
MinSpare Threads最小的空闲子进程数,默认75
MaxSpare Threads最大的空闲子进程数,默认250
ThreadsPerChild每个子进程产生的线程数量,默认是25
MaxRequestWorkers限定同一时间内客户端最大接入的请求数量,默认是400
MaxConnectionsPerChild每个子进程在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束。将该值设置为非0值,可以防止运行PHP导致的内存泄露

event优化建议

1.可根据生产环境进行调试,以确定合适参数
2.优化参考:
  ServerLimit       1000  StartServers  20  MinSpareThreads       25  MaxSpareThreads       1200  ThreadsPerChild       50  MaxRequestWorkers     2000  MaxC onnectionsPerChild 1000

prefork工作模式介绍

1.prefork是一个多路处理模块(MPM),实现了一个进程型的、预派生的web服务器,适合于没有线程安全库、需要避免线程兼容性问题的系统
2.在要求每个请求相互独立的情况下具有很好的特性,若- -个请求出现问题不会影响到其他请求
3.具有很强的自我调节能力,只需要很少的配置指令进行调整就可以适合于企业应用要求
4.最重要的是将MaxClients设置为一一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以避免所需的内存超出物理内存的大小
5.一个单独的控制进程(父进程)负责产生子进程,子进程用于监听请求并作出应答,因此在内存中会- -直存在一-些备用的(spare)或是空闲的子进程用于响应新的请求,可加快响应速度
6.父进程通常以root身份运行,以便绑定80端口,子进程通常以一个低特权的用户运行,可通过配置项的User和Group配置
7.运行子进程的用户必须要对网站内容有读取权限,但是对其他资源必须拥有尽可能少的权限,以保证系统安全
8.编译安装时没有指定工作模式,默认会使用prefork模式,可用httpd-l查看

prefork参数讲解

在httpd-mpm.conf配置文件中,以下是prefork模块的定义:
  StartServers      20  MinSpareServers       10  MaxSpareServers       50  MaxClients        150  MaxRequestsPerChild   0

参数说明:

参数说明
ServerLimit最大进程数
StartServers启动的时候创建的进程数量
MinSpareServers最少空闲进程
MaxSpareServers最多空闲进程
MaxClients最多创建多少个子进程用来处理请求
MaxRequestsPerChild每个进程处理的最大请求数,达到请求数,进程即被销毁,如果设置为0,子进程永远不会结束

prefork优化建议

1.可根据生产环境进行调试,以确定合适参数
2.优化参考:
  ServerLimit           1000  StartServers      10  MinSpareServers       10  MaxSpareServers       30  MaxClients        1000  MaxRequestsPerChild 5000

worker工作方式

1.每个进程能够拥有的线程数量 是固定的,服务器会根据负载情况增加或减少进程数量
2.一个单独的控制进程(父进程)负责子进程的建立。每个子进程能够建立ThreadsPerChild数量的服务线程和一个监听线程,监听线程监听接入请求并将其传递给服务线程处理和应答
3.Apache总是会维持一个备用(spare)或是空闲的服务线程池, 客户端无须等待新线程或新进程的建立即可得到服务
4.父进程一般都是以root身份启动,以绑定80端口;随后,Apache以较低权限的用户建立子进程和线程
5.User和Group指令用于配置Apache子进程的运行用户。 子进程要对网页内容拥有读权限,但应该尽可能限制权限

参数说明:

参数说明
ServerLimit最大进程数,默认值是"16"
ThreadL imit每个子进程的最大线程数,默认值是"64"
StartServers服务器启动时建立的子进程数,默认值是"3"
MaxClients允许同时接受的最大接入请求数量(最大线程数量)
MinSpare Threads最小空闲线程数,,默认值是"75"
MaxSpare Threads设置最大空闲线程数。默认值是"250"
ThreadsPerChild每个子进程建立的常驻的执行线程数。默认值是25
MaxRequestsPerChild设置每个子进程在其生存期内允许伺服的最大请求数量。设置为"0",子进程将永远不会结束

Apache目录属性

1.目录的权限设置使用和< /Directory > 这对语句为主目录或虚拟目录设置权限
2.它们是一-对容器语句,必须成对出现,它们之间封装的是具体的设置目录权限语句,这些语句仅对被设置目录及其子目录起作用

目录属性参数:

参数作用
Options设置在特定目录使用哪些特性
AllowOverride允许存在于.htaccess文件中的指令类型
Require设置目录的访问控制
Indexes当用户访问该目录时,但没有指定要访问哪个文件,而且目录下不存在默认网页时,返回目录中的文件和子目录列表
MultiViews内容协商的多重视图,Apache的一个智能特性。 当访问目录中不存在的对象时
ExecCGI允许在该目录下执行CGI脚本
FollowSymLinks在该目录下允许文件系统使用符号连接
Includes允许服务器端包含功能
IncludesNoExec允许服务器端包含功能,但禁止执行CGI脚本
All包含除了MultiViews之外所有特性,如果没有Options语句,默认为All

Demo1:Apache工作模式(此处以prefork为例)

第一步:手工编译安装Apache
[root@localhost ~]# smbclient  -L //192.168.0.103/Enter SAMBA\root's password: OS=[Windows 10 Home China 18362] Server=[Windows 10 Home China 6.3]    Sharename       Type      Comment    ---------       ----      -------    ADMIN$          Disk      远程管理    C$              Disk      默认共享    D$              Disk      默认共享    F$              Disk      默认共享    IPC$            IPC       远程 IPC    rpm             Disk      Connection to 192.168.0.103 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)NetBIOS over TCP disabled -- no workgroup available[root@localhost ~]# mkdir /aaa[root@localhost ~]# mount.cifs //192.168.0.103/rpm /aaaPassword for root@//192.168.0.103/rpm: [root@localhost ~]# cd /aaa[root@localhost aaa]# lsLAMP[root@localhost aaa]# cd LAMP/[root@localhost LAMP]# lsapr-1.6.2.tar.gz                  ha.jpgapr-util-1.6.0.tar.gz             httpd-2.4.29.tar.bz2awstats-7.6.tar.gz                lf.jpgcronolog-1.6.2-14.el7.x86_64.rpm  mysql-5.6.26.tar.gzDiscuz_X2.5_SC_UTF8.zip           nginx-1.12.0.tar.gzerror.png                         php-5.6.11.tar.bz2[root@localhost LAMP]# tar jxvf httpd-2.4.29.tar.bz2 -C /opt/[root@localhost LAMP]# tar zxvf apr-1.6.2.tar.gz -C /opt/[root@localhost LAMP]# tar zxvf apr-util-1.6.0.tar.gz -C /opt/[root@localhost LAMP]# cd /opt[root@localhost opt]# lsapr-1.6.2  apr-util-1.6.0  httpd-2.4.29  rh[root@localhost opt]# mv apr-1.6.2/ httpd-2.4.29/srclib/apr[root@localhost opt]# mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util[root@localhost opt]# yum install gcc gcc-c++ pcre pcre-devel zlib-devel expat-devel -y[root@localhost opt]#cd httpd-2.4.29/[root@localhost httpd-2.4.29]#./configure \--prefix=/usr/local/httpd \--enable-deflate \--with-mpm=prefork \--enable-expires \--enable-so \--enable-rewrite \--enable-charset-lite \--enable-cgi[root@localhost httpd-2.4.29]# make && make install[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf//建立软连接
第二步:修改配置文件
[root@localhost httpd-2.4.29]# vim /etc/httpd.conf 输入/mpm查找此关键词,将前面的#注释删除Include conf/extra/httpd-mpm.conf       //定位到这行将注释删除,启用功能输入/Listen查找此关键词,修改监听端口Listen 192.168.18.128:80        //此行IPv4监听打开,并且监听地址为Linux系统的IP地址#Listen 80                      //此行IPv6监听进行注释禁用输入/ServerName查找此关键词,修改域名ServerName www.test.com:80      //改域名为www.test.com修改完成按Esc退出插入模式,输入:wq保存退出
[root@localhost httpd-2.4.29]# cd /usr/local/httpd/[root@localhost httpd]# cd conf/[root@localhost conf]# lsextra  httpd.conf  magic  mime.types  original[root@localhost conf]# cd extra/[root@localhost extra]# lshttpd-autoindex.conf  httpd-languages.conf           httpd-ssl.confhttpd-dav.conf        httpd-manual.conf              httpd-userdir.confhttpd-default.conf    httpd-mpm.conf                 httpd-vhosts.confhttpd-info.conf       httpd-multilang-errordoc.conf  proxy-html.conf[root@localhost extra]# vim httpd-mpm.conf //此处我们先不做修改,直接退出,先执行过后,后期通过修改对比不同[root@localhost extra]# cd ../../bin/[root@localhost bin]# lsab            apu-1-config  dbmmanage    fcgistarter   htdigest  httxt2dbmapachectl     apxs          envvars      htcacheclean  htpasswd  logresolveapr-1-config  checkgid      envvars-std  htdbm         httpd     rotatelogs[root@localhost bin]# ./apachectl start[root@localhost bin]# netstat -ntap | grep 80tcp        0      0 192.168.18.128:80       0.0.0.0:*         LISTEN        58773/httpd [root@localhost bin]# lsof -i :80COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEhttpd   58773   root    3u  IPv4  84859      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58775 daemon    3u  IPv4  84859      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58776 daemon    3u  IPv4  84859      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58777 daemon    3u  IPv4  84859      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58778 daemon    3u  IPv4  84859      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58779 daemon    3u  IPv4  84859      0t0  TCP localhost.localdomain:http (LISTEN)//其中root为主进程,其他的5个为接收的子进程[root@localhost bin]# cd ../conf/extra/[root@localhost extra]# vim httpd-mpm.conf     StartServers             10     //启动的时候创建的进程数量改为10    MinSpareServers          10     //空闲最小改为10    MaxSpareServers         20      //最大设为20    MaxRequestWorkers      200      //访问设量为200     MaxConnectionsPerChild   0//修改完成按Esc退出插入模式,输入:wq保存退出[root@localhost extra]# cd ../../bin/[root@localhost bin]# ./apachectl stop[root@localhost bin]# ./apachectl start//重新关闭开启服务[root@localhost bin]# lsof -i :80COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEhttpd   58933   root    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58937 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58938 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58939 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58940 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58941 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58942 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58943 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58944 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58945 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)httpd   58946 daemon    3u  IPv4  88357      0t0  TCP localhost.localdomain:http (LISTEN)//除去一个主进程,其他的子进程变为10个[root@localhost bin]# ./httpd -l        //查看工作模式Compiled in modules:  core.c  mod_so.c  http_core.c  prefork.c     //此时处于prefork工作模式

Demo2:目录属性

[root@localhost bin]# vim /etc/httpd.conf输入/htdocs查找此关键词,找到如下字段,其中有两个功能起到支持作用:DocumentRoot "/usr/local/httpd/htdocs"    #    # Possible values for the Options directive are "None", "All",    # or any combination of:    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews    #    # Note that "MultiViews" must be named *explicitly* --- "Options All"    # doesn't give it to you.    #    # The Options directive is both complicated and important.  Please see    # http://httpd.apache.org/docs/2.4/mod/core.html#options    # for more information.    #    Options Indexes FollowSymLinks          //1.Index:以列表形式展现    //2.FollowSymLinks并且支持链接性的文件    #    # AllowOverride controls what directives may be placed in .htaccess files.    # It can be "All", "None", or any combination of the keywords:    #   AllowOverride FileInfo AuthConfig Limit    #    AllowOverride None    #    # Controls who can get stuff from this server.    #    Require all granted         //黑白名单#我们可以先关闭防火墙,使用宿主机的浏览器进行验证[root@localhost bin]# systemctl stop firewalld.service [root@localhost bin]# setenforce 0

[root@localhost bin]# cd /usr/local/httpd/htdocs/[root@localhost htdocs]# lsindex.html[root@localhost htdocs]# cat index.html 

It works!

[root@localhost htdocs]# lsindex.html[root@localhost htdocs]# mv index.html a.html[root@localhost htdocs]# lsa.html[root@localhost htdocs]# touch b.html c.html d.html[root@localhost htdocs]# lsa.html b.html c.html d.html//此时会以文件列表的形式展现,从另一个角度我们可以利用这点来做文件下载资源的提供,此时就不需要首页识别

[root@localhost htdocs]# ln -s /usr/share/man/ ./       //把man手册放入这个文件夹,看他能不能识别这个链接文件[root@localhost htdocs]# lsa.html  b.html  c.html  d.html  man


进程 线程 模式 目录 文件 服务 工作 最大 参数 数量 空闲 权限 监听 个子 服务器 处理 配置 输入 用户 系统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 广州大一互联网络科技有限公司 易互联网科技有限公司 中国 科技 互联网 有马互联网科技 赫美联合互联网科技 上游互联网科技 中正互联网科技招聘 深圳市运趣互联网科技有限公司 天速互联网络科技有限公司 须眉科技是互联网公司吗 常德市电业局互联网科技部 东莞新华互联网科技学校 中科明德北京互联网科技 无锡工业互联网科技有限公司 山东星卡互联网科技有限公司官网 新氧科技和美国互联网有关系吗 互联网界的黑科技 易租星互联网科技有限公司 众联互联网络科技 中国互联网科技工作委员会毛军 青岛互联网科技公司 丰台科技园 互联网 新浪科技互联网 甘肃拓世互联网科技有限公司 玖二柒互联网科技公司待遇 恒生互联网科技指数跳水 内蒙古九一互联网科技 合肥互联网科技公司公章图片 伍佰万互联网科技是干嘛的
0