apache配置加载顺序严格分步:主配置文件(如httpd.conf)最先加载,其中include指令按字母序即时展开子文件;.htaccess最晚动态生效;模块须按依赖顺序加载,如so_module必须前置,mod_ssl需mod_socache先行。

Apache 默认目录结构中配置文件的加载顺序不是随意的,而是严格按启动阶段分步展开、层层覆盖的机制。理解这个顺序,才能准确判断哪条配置最终生效,避免“改了不生效”或“被意外覆盖”。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
主配置文件最先加载且必须存在
Apache 启动时只认一个起点:主配置文件。
- CentOS/RHEL/Fedora 系统路径是
/etc/httpd/conf/httpd.conf - Ubuntu/Debian 系统路径是
/etc/apache2/apache2.conf
它定义了ServerRoot、Listen、User/Group、全局日志路径等基础参数,并通过Include或IncludeOptional指令引入其他配置片段。没有它,服务根本无法启动。
Include 指令在出现位置立即展开,按字母序加载子文件
主配置里常见的行如:
-
Include conf.modules.d/*.conf -
IncludeOptional sites-enabled/*.conf -
Include conf.d/*.conf
这些指令不是“最后统一读”,而是在配置文件中该行所在位置立刻执行:匹配所有 .conf 文件,再按文件名字母顺序逐个读取(例如 00-base.conf 先于 10-php.conf)。
这意味着:
- 后加载的文件可以覆盖前面已定义的同名指令(如多个
DocumentRoot,以最后一个为准) - 模块加载必须早于使用它的配置(比如
mod_ssl要在SSLProtocol指令之前加载) - 虚拟主机配置若放在
Include sites-enabled/*.conf之后,会受主配置中已设的全局限制(如MaxRequestWorkers)
目录级配置(.htaccess)最晚介入,仅在允许时动态生效
当请求到达具体路径时,Apache 才从目标文件系统路径向上逐层检查是否存在 .htaccess 文件:
- 前提是对应
<directory></directory>块中设置了AllowOverride All或明确启用了某类指令(如AllowOverride FileInfo) - 它不参与启动加载,而是每次请求都解析,性能开销明显
- 作用范围仅限该目录及其子目录,不能定义
Listen或LoadModule这类服务器级指令
模块加载有硬性先后依赖,顺序错就启动失败
模块不是并列加载的:
- 预链接模块(
core_module、so_module、http_module)最先硬编码载入 -
so_module必须排在所有LoadModule行最前面——它是后续动态模块的加载器 -
mod_ssl依赖mod_socache,mod_proxy_fcgi依赖mod_proxy,缺失前置模块会导致httpd -t报错退出 - 推荐按功能层级组织:核心支撑 → 通用扩展 → 协议/处理器类模块
基本上就这些。










