无法在macOS Sierra 10.12.6启动Apache/2.4.29(Unix),求助排查
我之前在处理brew安装的Apache时也碰到过一模一样的AH00136错误,其实根源就是服务器没法正确降级启动权限——要么是核心的mod_unixd模块没加载,要么是权限配置出了问题。按下面的步骤一步步来,应该能快速解决:
检查并启用mod_unixd模块
首先打开brew安装的httpd配置文件(注意和系统自带的Apache配置路径不同):open /usr/local/etc/httpd/httpd.conf在文件里搜索
mod_unixd,找到类似这样的行:#LoadModule unixd_module lib/httpd/modules/mod_unixd.so把行首的
#去掉,保存文件。这个模块是Apache处理权限降级的核心,没有它服务器没法从root权限切换到普通用户运行,自然会报这个错误。确认User和Group配置正确
还是在httpd.conf文件里,找到User和Group的配置段,确保它们设置为系统默认的web用户组:User _www Group _www你可以用下面的命令验证
_www用户是否存在:dscl . -read /Users/_www如果输出用户的详细信息就没问题;要是不存在,执行
sudo dscl . -create /Users/_www就能创建,但一般brew安装httpd时会自动配置好这个用户。修复目录权限
Apache需要对日志目录和网站根目录有读写权限,执行下面的命令修复权限:sudo chown -R _www:_www /var/log/apache2 sudo chown -R _www:_www /usr/local/var/www(如果你的网站根目录不是
/usr/local/var/www,替换成你实际使用的路径即可)验证配置并重启服务
先检查配置文件有没有语法错误,避免因为配置写错导致启动失败:/usr/local/bin/httpd -t如果输出
Syntax OK,就可以重启httpd服务了:brew services restart httpd另外要注意,如果系统自带的Apache还在运行,记得先停掉它,避免端口冲突:
sudo apachectl stop
如果完成上面的步骤后还是有问题,可以再查看/var/log/apache2/error_log的最新信息,看看是不是还有其他权限相关的细节错误,一般按这个流程走就能解决AH00136的问题。
内容的提问来源于stack exchange,提问作者Pavel Hájek

