Apache httpd基础篇05 — 扩展配置文件的说明

概述

本章,您将了解到 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
  1. Web 服务器关键配置

    • httpd-default.conf‌ - 一些关于 Web 服务器的基础信息配置,如设置服务器的超时时间、长连接(KeepAlive)时长、服务器版本信息等。这个文件的内容后面会重点说明
    • httpd-mpm.con - 关于 MPM 以及进程或子进程的相关配置。这个文件的内容后面会重点说明
  2. 目录与文件展示

    • ‌httpd-autoindex.conf‌ - 目录列表配置。当目录下没有索引文件时,控制目录列表的显示方式
    • httpd-userdir.conf‌ - 用户目录配置。允许服务器上每个用户拥有自己的网站目录
  3. 虚拟主机与代理

    • httpd-vhosts.conf‌ — 虚拟主机配置。用于配置基于域名或 IP 的虚拟主机,让一台服务器托管多个网站
    • proxy-html.conf - 做反向代理的一些配置
  4. 安全与加密

    • httpd-ssl.conf‌ — 与 SSL/TLS 加密或安全相关的配置
  5. 语言与手册

    • httpd-manual.conf - 语言支持配置。设置多语言支持,包括字符集映射、语言优先级等国际化相关配置
    • httpd-multilang-errordoc.conf - 多语言错误文档配置。提供多语言版本的错误页面(如 404、500 等),根据客户端语言偏好显示对应语言的错误信息
    • ‌httpd-manual.conf‌ - 在线手册配置。配置 Apache 在线文档手册的访问路径和权限
  6. 扩展功能

    • ‌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 秒内没有发送新请求,服务器会关闭该连接。MaxKeepAliveRequestsKeepAliveTimeout 两者属于 "或" 的关系,即只要达到任意一个条件的上限,则会触发断开 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 进行了变更,暂时不进行还原操作,后面还用得到。

Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇