Ubuntu Apache 故障排查与修复
一 快速定位
sudo systemctl status apache2 -l --no-pager 确认是否 active (running);如失败,执行:sudo journalctl -u apache2.service --since today --no-pager 查看服务层错误。sudo tail -f /var/log/apache2/error.log;必要时参考访问日志:/var/log/apache2/access.log。sudo netstat -tulpen | grep -E ':80|:443'。sudo apachectl configtest,确保返回 Syntax OK。curl -I http://127.0.0.1;远程测试:curl -I http://服务器IP。二 常见故障与修复对照表
| 症状 | 快速检查 | 修复建议 |
|---|---|---|
| 服务启动失败,状态为 failed | systemctl status apache2、journalctl -u apache2 |
依据日志提示逐项修复;先用 apachectl configtest 排除语法问题 |
| Address already in use(端口被占用) | `netstat -tulpen | grep :80` |
| 配置文件语法错误 | apachectl configtest 报错行号 |
按提示修正 /etc/apache2/apache2.conf、/etc/apache2/sites-available/*.conf 等 |
| 403 Forbidden / 404 Not Found | 检查虚拟主机 DocumentRoot、Directory 配置与目录是否存在 |
修正路径、权限与 AllowOverride;必要时启用 mod_rewrite |
| 网站目录权限错误 | ls -ld /var/www/html 等 |
目录 755、文件 644,属主属组为 www-data:www-data |
| 模块缺失(如 rewrite/ssl) | a2enmod rewrite、a2enmod ssl |
启用所需模块后 systemctl restart apache2 |
| 防火墙阻断 | sudo ufw status |
放行:sudo ufw allow 'Apache Full'(或放行 80/443) |
| PHP 页面空白或报错 | sudo php -m、tail -f /var/log/php*.log |
确认 PHP 模块已启用、配置正确、日志无致命错误 |
| 云服务器外网访问不了 | 本地 curl 正常、外网不通 |
在云厂商安全组/防火墙放行 80/443 或自定义端口 |
以上条目覆盖了最常见的启动失败、端口冲突、配置语法、权限、模块、防火墙与云平台放行等关键场景。
三 高频场景操作清单
sudo netstat -tulpen | grep :80sudo kill -9 <PID>(谨慎操作)sudo systemctl restart apache2sudo nano /etc/apache2/ports.conf,将 Listen 80 改为未占用端口(如 81)sudo apachectl configtestsudo a2ensite your_site.conf;禁用:sudo a2dissite your_site.confsudo chown -R www-data:www-data /var/www/your_sitesudo find /var/www/your_site -type d -exec chmod 755 {} \;sudo find /var/www/your_site -type f -exec chmod 644 {} \;sudo a2enmod rewrite && sudo systemctl restart apache2sudo a2enmod ssl && sudo systemctl restart apache2sudo ufw allow 'Apache Full'sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reloadsudo php -msudo tail -f /var/log/php7.x-fpm.log(将 x 替换为实际版本)四 仍无法恢复时的稳妥方案
sudo apt-get --purge remove apache2 apache2-utils apache2.2-commonsudo apt-get autoremove && sudo apt-get autocleansudo find /etc -name "*apache*" -exec rm -rf {} \;(可能误删,建议先备份)sudo apt-get update && sudo apt-get install apache2sudo systemctl start apache2/etc/apache2/sites-available/ 与 /etc/apache2/conf-available/,便于快速回滚到上一个稳定版本。