概述
本章,您将了解到 Apache httpd 中关于扩展配置文件的说明。
Shell > ls -l /usr/local/apache2/conf/
total 104
drwxr-xr-x 2 root root 4096 Jun 13 22:42 extra
-rw-r--r-- 1 root root 18664 Jun 13 22:42 httpd.conf
-rw-r--r-- 1 root root 13064 Jun 13 22:42 magic
-rw-r--r-- 1 root root 61109 Jun 13 22:42 mime.types
drwxr-xr-x 3 root root 4096 Jun 13 22:42 original
在 conf 目录中除了主配置文件 httpd.conf 外,还存在 extra 目录和 original 目录:
- extra 目录 - 存放着按功能拆分的扩展配置文件的目录,默认情况下里面的文件都没有被加载
- original 目录 - 在初次安装或升级 Apache httpd 时,安装程序会把原始的、未经修改的配置文件备份到该目录里
若要修改 Apache httpd 的配置,既可以把所有的配置写入到 httpd.conf 文件中,也可以在 httpd.conf 中使用 Include 指令加载其他的配置文件。
扩展配置文件的功能解读
在 extra 目录下存在着这些按功能拆分的扩展配置文件:
Shell > ls -l /usr/local/apache2/conf/extra/
total 68
-rw-r--r-- 1 root root 2906 Jun 13 22:42 httpd-autoindex.conf
-rw-r--r-- 1 root root 1955 Jun 13 22:42 httpd-dav.conf
-rw-r--r-- 1 root root 2942 Jun 13 22:42 httpd-default.conf
-rw-r--r-- 1 root root 1119 Jun 13 22:42 httpd-info.conf
-rw-r--r-- 1 root root 5079 Jun 13 22:42 httpd-languages.conf
-rw-r--r-- 1 root root 1397 Jun 13 22:42 httpd-manual.conf
-rw-r--r-- 1 root root 4444 Jun 13 22:42 httpd-mpm.conf
-rw-r--r-- 1 root root 2281 Jun 13 22:42 httpd-multilang-errordoc.conf
-rw-r--r-- 1 root root 13392 Jun 13 22:42 httpd-ssl.conf
-rw-r--r-- 1 root root 694 Jun 13 22:42 httpd-userdir.conf
-rw-r--r-- 1 root root 1469 Jun 13 22:42 httpd-vhosts.conf
-rw-r--r-- 1 root root 3161 Jun 13 22:42 proxy-html.conf
-
Web 服务器关键配置
- httpd-default.conf - 一些关于 Web 服务器的基础信息配置,如设置服务器的超时时间、长连接(KeepAlive)时长、服务器版本信息等。这个文件的内容后面会重点说明
- httpd-mpm.con - 关于 MPM 以及进程或子进程的相关配置。这个文件的内容后面会重点说明
-
目录与文件展示
- httpd-autoindex.conf - 目录列表配置。当目录下没有索引文件时,控制目录列表的显示方式
- httpd-userdir.conf - 用户目录配置。允许服务器上每个用户拥有自己的网站目录
-
虚拟主机与代理
- httpd-vhosts.conf — 虚拟主机配置。用于配置基于域名或 IP 的虚拟主机,让一台服务器托管多个网站
- proxy-html.conf - 做反向代理的一些配置
-
安全与加密
- httpd-ssl.conf — 与 SSL/TLS 加密或安全相关的配置
-
语言与手册
- httpd-manual.conf - 语言支持配置。设置多语言支持,包括字符集映射、语言优先级等国际化相关配置
- httpd-multilang-errordoc.conf - 多语言错误文档配置。提供多语言版本的错误页面(如 404、500 等),根据客户端语言偏好显示对应语言的错误信息
- httpd-manual.conf - 在线手册配置。配置 Apache 在线文档手册的访问路径和权限
-
扩展功能
- httpd-dav.conf - 与 WebDAV 相关的配置
- httpd-info.conf - 服务器信息配置。配置服务器状态页面和信息显示页面,用于监控服务器运行状态。
httpd-default.conf 文件内容说明
默认情况下,该文件的内容为(移除了注释行):
Shell > grep -E -v "^#|^$" /usr/local/apache2/conf/extra/httpd-default.conf
Timeout 60
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Full
ServerSignature Off
HostnameLookups Off
<IfModule reqtimeout_module>
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
</IfModule>
-
Timeout指令 - Web 服务器等待某些事件完成的最大时间(以秒为单位),这些事件包括接收请求、传输响应等操作。超过等待的时间后,Web 服务器会断开连接 -
KeepAlive指令 - 是否启用 HTTP Keep-Alive 长连接 -
MaxKeepAliveRequests指令 - 限制单个长连接(持久连接)上最多允许处理的请求数量。达到 100 个请求后,服务器会主动关闭该连接。设置为 0 表示不限制 -
KeepAliveTimeout指令 - 长连接(持久连接)上等待客户端下一个请求的秒数。如果客户端在 5 秒内没有发送新请求,服务器会关闭该连接。MaxKeepAliveRequests和KeepAliveTimeout两者属于 "或" 的关系,即只要达到任意一个条件的上限,则会触发断开 TCP 连接的操作 -
UseCanonicalName指令 - 是否启用规范的 URL,若启用,则 Apache httpd 会使用ServerName指令中定义的主机名和端口来构建规范的 URL。若场景为虚拟主机,该指令的指令参数推荐为 off -
AccessFileName指令 - 设置分布式配置文件的名字,默认为 .htaccess -
ServerTokens指令 - 返回给客户端的 Apache httpd 服务器信息,一般情况下,我们不希望 Web 服务器提供这么多的详细信息,防止有人利用版本的漏洞攻击服务器,增加安全隐患。不同的指令参数返回的信息如下示例:指令参数 返回的信息 Full Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2 Prod Server: Apache Major Server: Apache/2 Minor Server: Apache/2.4 Min Server: Apache/2.4.2 OS Server: Apache/2.4.2 (Unix) -
ServerSignature指令 - 和ServerTokens指令关联,在页面产生错误时是否出现服务器版本信息,推荐为Off -
HostnameLookups指令 - 是否对客户端 IP 地址进行反向 DNS 解析,推荐为Off -
RequestReadTimeout指令 - 由 reqtimeout_module 模块提供,用于精细控制服务器在接收客户端请求头和请求体时的超时行为。指令的语法为RequestReadTimeout [header=timeout[[-maxtimeout],MinRate=rate] [body=timeout[[-maxtimeout],MinRate=rate]。上面的配置可描述为:- 请求头阶段:客户端必须在 20 秒内开始发送请求头。如果开始发送但速率很慢,整个请求头的接收过程最多允许 40 秒完成。在整个接收期间,平均传输速率不得低于 500 字节/秒。
- 请求体阶段:客户端必须在 20 秒内完成整个请求体的发送,且传输速率不得低于 500 字节/秒。
如果客户端未能满足上述任一条件,服务器会中断连接,并返回 408 Request Timeout 错误。
需要注意的是,
RequestReadTimeout指令提供了比全局Timeout指令更精细的控制。当两者同时配置时,RequestReadTimeout的优先级更高
httpd-mpm.con 文件内容说明
在编译安装 Apache httpd 时,由于未指定 --with-mpm=MPM 选项,则 MPM 默认工作模式为 event 。
Shell > /usr/local/apache2/bin/apachectl -V
Server version: Apache/2.4.68 (Unix)
Server built: Jun 13 2026 22:40:36
Server's Module Magic Number: 20120211:142
Server loaded: APR 1.7.6, APR-UTIL 1.6.3, PCRE 10.32 2018-09-10
Compiled using: APR 1.7.6, APR-UTIL 1.6.3, PCRE 10.32 2018-09-10
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_PROC_PTHREAD_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/usr/local/apache2/"
-D SUEXEC_BIN="/usr/local/apache2//bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf
只需要关注 event 工作模式即可:
Shell > grep -E -v "^#|^$" /usr/local/apache2/conf/extra/httpd-mpm.conf
...
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
...
| 指令 | 指令参数 | 说明 |
|---|---|---|
| StartServers | 3 | Apache httpd 启动时创建的子进程数量 |
| MinSpareThreads | 75 | 最小的空闲线程数 |
| MaxSpareThreads | 250 | 最大的空闲线程数 |
| ThreadsPerChild | 25 | 每个子进程中的线程数量 |
| MaxRequestWorkers | 400 | 同时处理请求的最大线程数,即最大并发连接数 |
| MaxConnectionsPerChild | 0 | 每个子进程处理的最大请求数,0 表示不限制 |
通过默认配置可知,event 工作模式下的 Apache httpd 最多存在 16 个子进程(400/25=16)
基准测试
通过加载 httpd-mpm.conf 文件,可以对 Apache httpd 进行基础的基准测试。
首先在主配置文件中修改这两项:
Shell > grep -i -E "httpd-mpm|servername" /usr/local/apache2/conf/httpd.conf | grep -v ^#
ServerName 192.168.100.20:80
Include conf/extra/httpd-mpm.conf
http-mpm.conf 这个扩展配置文件不做任何修改,默认即可。
使用 /usr/local/apache2/bin/apachectl start 将 Web 服务启动:
Shell > /usr/local/apache2/bin/apachectl start
使用 htop 命令查看进程的 RES 列可知,每个子进程占用的物理内存大约在 7MB~12MB 之间。
使用 ab 命令进行基准测试:
# 输出的内容很多,但最重要的是这部分
## -c 选项指定并发用户数,-n 选项指定向服务器发送的总请求
Shell > /usr/local/apache2/bin/ab -c 400 -n 1200 http://192.168.100.20/index.html
...
Concurrency Level: 400
Time taken for tests: 0.109 seconds
Complete requests: 1200
Failed requests: 0
Total transferred: 523200 bytes
HTML transferred: 229200 bytes
Requests per second: 10991.93 [#/sec] (mean)
Time per request: 36.390 [ms] (mean)
Time per request: 0.091 [ms] (mean, across all concurrent requests)
Transfer rate: 4680.16 [Kbytes/sec] received
...
- Failed requests 必须为 0,如果有失败,说明系统已达瓶颈或出现错误
- Requests per second (每秒请求数,即 RPS/QPS)是衡量 Web 服务器的关键指标
- 第一个 Time per request,从用户视角感知到的平均响应时间为 36.39ms
- 第二个 Time per request,表示处理单个请求的平均时间
若 RPS 很高但处理单个请求时较慢,则可能需要优化后端。
这里对主配置文件 httpd.conf 进行了变更,暂时不进行还原操作,后面还用得到。










