FreeBSD 8.1下apache22启动失败问题求助
解决FreeBSD 8.1上Apache22启动失败的问题
咱们先从日志里的关键错误入手——这是导致启动失败的直接原因:
(21)Is a directory: httpd: could not open error log file /home/httpd-logs/hostname.example.error.log. Unable to open logs
这个错误很明确:Apache试图把错误日志写入一个目录,而不是文件,自然就启动失败了。
第一步:修复错误日志路径问题
- 先检查目标路径的类型:
如果输出开头是ls -ld /home/httpd-logs/hostname.example.error.logd(代表这是个目录),先删掉这个错误的目录:rm -rf /home/httpd-logs/hostname.example.error.log - 或者换个更稳妥的默认日志路径。FreeBSD上Apache默认日志目录是
/var/log/apache22/,这个目录一般已存在且权限合适。打开Apache主配置文件(通常是/usr/local/etc/apache22/httpd.conf),找到ErrorLog行修改为:
要是用了虚拟主机,还要同步修改ErrorLog "/var/log/apache22/error.log"/usr/local/etc/apache22/extra/httpd-vhosts.conf里对应虚拟主机的错误日志路径。 - 修改后务必验证配置语法:
apachectl configtest
第二步:处理AcceptFilter警告
你已经在/boot/loader.conf里添加了accf_http_load="YES"和accf_data_load="YES",但这些内核模块需要系统重启才会生效。如果不想重启,临时加载模块即可:
kldload accf_http kldload accf_data
加载完成后再启动Apache,那两个警告就会消失。
第三步:验证启动方式
为什么apachectl start没报错但rc脚本启动失败?大概率是rc脚本的环境变量、配置路径和apachectl有差异,或者存在权限问题。按下面的步骤排查:
- 先停止当前可能运行的Apache进程:
apachectl stop - 再用rc脚本尝试启动:
/usr/local/etc/rc.d/apache22 start - 如果还是失败,检查状态或系统日志找原因:
或者查看/usr/local/etc/rc.d/apache22 status/var/log/messages里的相关记录。
额外注意:权限问题
确保Apache运行用户(默认是www)对日志目录有读写权限,比如给默认日志目录调整权限:
chown -R www:wheel /var/log/apache22/
按上面的步骤处理完,应该就能正常启动Apache22了。
内容的提问来源于stack exchange,提问作者Yaroslav Savluk
相关产品推荐
相关产品推荐

