You need to enable JavaScript to run this app. 设项目为Apache DocumentRoot时访问子目录报ERR_CONNECTION_REFUSED
优惠活动
大模型
产品
解决方案
定价
更多

设项目为Apache DocumentRoot时访问子目录报ERR_CONNECTION_REFUSED

异常根本成因

你遇到的连接错误并不是目录权限或网络配置导致的,核心是两处Apache配置的硬冲突:

  • 同时加载了两个互斥的MPM多处理模块:mpm_event_module和mpm_prefork_module。Apache 2.4架构中MPM是决定进程/线程运行模型的核心组件,同一时间仅允许加载一个。双模块共存时,Apache启动阶段不会直接抛出致命错误,根目录下的简单请求可能被兼容逻辑正常处理,但一旦处理子目录下需要PHP解析的动态请求时,就会触发进程上下文冲突,直接导致worker进程崩溃、中断TCP连接,浏览器就会收到ERR_CONNECTION_REFUSED的报错。这也能解释你把DocumentRoot切到上层Sites目录时所有请求恢复正常的现象——此时请求匹配到上层目录的配置规则,双MPM的冲突分支不会被触发。
  • 项目根目录对应的<Directory>配置块为空,没有配置Apache 2.4要求的显式访问授权规则。根目录文件能临时正常访问,是因为请求匹配到了上层~/Sites目录的默认权限规则;一旦访问子目录路径,会优先匹配到你写的空Directory块,触发访问控制模块的默认异常退出逻辑,进一步加剧连接中断的问题。
配置调整步骤

按以下顺序调整即可完全复现生产环境的访问逻辑:

  1. 注释掉不兼容的MPM模块
    你加载的是PHP 7.2版本的模块,该版本和prefork运行模型完全兼容,和event模型存在兼容问题,因此保留mpm_prefork_module,在配置文件找到对应行前面加#注释:
    # LoadModule mpm_event_module lib/httpd/modules/mod_mpm_event.so
    
    同时可以删掉配置里两个空的IfModule判断块,这两段配置没有实际运行逻辑,属于冗余内容。
  2. 补全项目根目录的Directory授权配置
    按照Apache 2.4的标准要求,在你之前写的空Directory块内补充完整访问规则:
    DocumentRoot "/Users/brendan/Sites/UK_Libraries_Site"
    <Directory "/Users/brendan/Sites/UK_Libraries_Site">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    
  3. 校验并重启服务
    配置修改完成后,先执行配置语法校验命令,确认无报错后再重启Apache,避免配置错误导致服务启动失败:
    # 配置语法校验
    httpd -t
    # 校验返回Syntax OK后重启服务
    sudo apachectl restart
    
  4. 异常兜底排查
    如果调整后仍有访问异常,可直接查看Apache错误日志定位问题,日志默认路径为/private/var/log/apache2/error_log,双MPM冲突的场景下,日志中一般会记录worker进程异常退出、模块上下文不匹配类的报错。

内容的提问来源于stack exchange,提问作者Brendan Jackson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 05:15:00