Apache Ubuntu 故障排查技巧
一 快速定位流程
sudo systemctl status apache2 -l --no-pagersudo journalctl -u apache2 -n 50 --no-pagersudo apache2ctl configtest(或 apachectl configtest)/etc/apache2/apache2.conf,站点配置在 /etc/apache2/sites-available/,启用站点使用 a2ensite <站点名> 并 a2dissite <旧站点名> 切换sudo ss -tulpen | grep -E ':80|:443'sudo lsof -iTCP:80 -sTCP:LISTEN 或 sudo fuser -n tcp 80sudo tail -f /var/log/apache2/error.log/var/log/apache2/access.loguptime、free -h、df -hsudo systemctl reload apache2(热加载)或 sudo systemctl restart apache2(重启)二 常见症状与处理要点
| 症状 | 优先检查 | 快速修复 |
|---|---|---|
| 服务无法启动 | systemctl status apache2、journalctl -u apache2、apache2ctl configtest |
修正语法错误;若端口冲突,释放端口或调整监听;必要时 systemctl restart apache2 |
| 端口被占用(80/443) | `ss -tulpen | grep -E ':80 |
| 403 Forbidden | 目录权限与 Directory 配置、AllowOverride、Require all granted |
目录权限一般为 755、文件 644;确保 www-data 可读;检查 .htaccess 与 AllowOverride |
| 404 Not Found | DocumentRoot 路径、DirectoryIndex、实际文件是否存在 |
修正 DocumentRoot 与 Directory 路径;补充缺失索引文件;核对站点启用状态 |
| 500 Internal Server Error | error.log 首行报错、.htaccess/PHP 语法、模块缺失 |
依据日志定位文件/模块;注释可疑 .htaccess;安装缺失模块并 a2enmod <模块名> |
| 网站变慢或卡顿 | top/htop、free -h、ss -s、数据库慢查询 |
优化代码与查询;调整 KeepAlive 与 MPM 参数;必要时扩容或做缓存 |
| PHP 页面空白/报错 | PHP 错误日志(如 /var/log/php8.x-fpm.log)、phpinfo() |
打开错误显示或查看 PHP-FPM 日志;修正语法/路径/权限问题 |
| HTTPS/证书问题 | 证书路径、权限、SSLEngine on、端口 443 监听 |
校正证书与私钥路径与权限(通常为 600/644);确认 a2enmod ssl 与站点启用 |
| SELinux/AppArmor 拒绝 | `dmesg | grep -i denied、journalctl |
| 防火墙阻断 | sudo ufw status、sudo iptables -S、sudo nft list ruleset |
放行 80/443:sudo ufw allow 80,443/tcp 或相应防火墙规则放行 |
| 以上要点对应的命令与路径均为 Ubuntu 上 Apache 的常用实践,可快速定位并修复大多数常见问题。 |
三 日志与诊断命令速查
sudo systemctl status apache2 -l --no-pagersudo journalctl -u apache2 --since today --no-pagersudo apache2ctl configtestls /etc/apache2/sites-enabled/(核对启用的站点)sudo ss -tulpen | grep -E ':80|:443'sudo lsof -iTCP:80 -sTCP:LISTEN 或 sudo fuser -n tcp 80sudo tail -f /var/log/apache2/error.loggrep -i "error\|fail\|denied" /var/log/apache2/error.log | tail -50awk '{print $9}' /var/log/apache2/access.log | sort | uniq -c | sort -nruptime、free -h、df -htop/htop、iotop、vmstat 1 10ping、traceroute、curl -Iv https://你的域名四 变更与回滚的安全做法
/etc/apache2/ 使用 Git 管理,变更前 git commit -a -m "描述",便于快速回滚script -a ~/troubleshooting_$(date +%F_%H%M%S).logapache2ctl configtest,再 systemctl reload 验证;必要时先 a2dissite 旧站点、a2ensite 新站点并观察日志cp /etc/apache2/sites-available/000-default.conf{,.bak-$(date +%F)}tail -f /var/log/apache2/error.log,确认无异常再对外恢复全量流量