Ubuntu 上 Apache2 故障排查流程
一 快速定位与系统状态检查
二 常见故障与修复对照表
| 症状 | 快速检查 | 修复建议 |
|---|---|---|
| 服务启动失败,提示 Address already in use | ss -tulpen | grep ‘:80’ 查看占用;结束冲突进程或调整 /etc/apache2/ports.conf 的 Listen 端口,并同步虚拟主机端口;重启服务 |
| 启动报错 Invalid command ‘SSLEngine’ | apachectl configtest | 启用 SSL 模块:sudo a2enmod ssl;如未安装 OpenSSL:sudo apt install openssl;重启服务 |
| 403 Forbidden | 检查目录权限与 Directory 配置 | 网站目录权限建议 755,文件 644;确保 DocumentRoot 的 |
| 500 Internal Server Error | tail -f error.log 定位模块/脚本错误 | 依据日志修复语法或后端错误;必要时开启更详细日志级别以排查 |
| 无法访问网站(浏览器超时/拒绝) | ss -tulpen | grep ‘:80’;ufw/云安全组;确认 Listen/虚拟主机端口一致 |
| AH00558 Could not reliably determine the server’s fully qualified domain name | 查看 apache2 启动输出 | 在 /etc/apache2/apache2.conf 或虚拟主机中添加 ServerName localhost 或实际域名 |
以上检查与修复要点涵盖端口冲突、模块缺失、权限配置、语法校验与网络放行等常见场景。
三 配置语法与虚拟主机检查
四 日志分析与持续监控
五 一键排查脚本示例
#!/usr/bin/env bash
set -Eeuo pipefail
echo "=== Apache2 故障排查 ==="
echo
echo "[1/7] 服务状态"
sudo systemctl status apache2 -l --no-pager || true
echo
echo "[2/7] 最新错误日志(最近20行)"
sudo tail -n20 /var/log/apache2/error.log || echo "无法读取 /var/log/apache2/error.log"
echo
echo "[3/7] 端口监听(80/443)"
ss -tulpen | grep -E ':80|:443' || echo "未检测到 80/443 监听"
echo
echo "[4/7] 配置语法"
sudo apachectl configtest
echo
echo "[5/7] UFW 防火墙状态"
sudo ufw status || echo "未安装或未启用 UFW"
echo
echo "[6/7] 站点启用情况"
ls -1 /etc/apache2/sites-enabled/ 2>/dev/null || echo "无启用站点"
echo
echo "[7/7] 模块启用情况(ssl rewrite proxy proxy_http)"
for m in ssl rewrite proxy proxy_http; do
if a2query -m "$m" &>/dev/null; then
echo " [OK] $m 已启用"
else
echo " [MISS] $m 未启用(可运行:sudo a2enmod $m)"
fi
done
echo
echo "排查完成。根据上方提示修复后,执行:sudo systemctl restart apache2"