在 Ubuntu 上配置 Apache2 时,确实有不少“坑”,尤其是权限、模块、虚拟主机、HTTPS、重写规则这些地方。下面按常见场景给你总结一下,附上原因 + 解决方案,基本踩过的都在这了。
现象
Forbidden
You don't have permission to access this resource.
原因
www-data 没有读取权限解决
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
⚠ 注意:
/home/user/www),需要开启 mod_userdir现象
原因
AllowOverride解决
sudo a2enmod rewrite
编辑虚拟主机:
<Directory /var/www/html>
AllowOverride All
</Directory>
然后:
sudo systemctl restart apache2
原因
正确流程
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.conf
sudo a2ensite example.conf
sudo systemctl reload apache2
⚠ 注意:
a2ensite 后一定要 reload现象
原因
000-default.conf 优先解决
sudo a2dissite 000-default.conf
sudo systemctl reload apache2
原因
ports.conf解决
sudo vi /etc/apache2/ports.conf
Listen 8080
防火墙:
sudo ufw allow 8080
原因
解决
sudo a2enmod ssl
sudo systemctl restart apache2
原因
.well-known/acme-challenge 被重写规则拦截解决 在重写规则前加:
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
原因
.php解决
sudo apt install libapache2-mod-php
sudo systemctl restart apache2
原因
www-data 运行解决
sudo chown -R www-data:www-data storage
sudo chmod -R 775 storage
一定要看日志
sudo tail -f /var/log/apache2/error.log
常见错误:
AH00558 → ServerName 未设置AH01630 → 权限拒绝AH00111 → 端口冲突AH00558: apache2: Could not reliably determine the server's fully qualified domain name
解决
echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/servername.conf
sudo a2enconf servername
sudo systemctl restart apache2
原因
✅ 用这个检查:
apache2ctl -S
✅ 是否 a2enmod
✅ 是否 a2ensite
✅ 是否 systemctl restart apache2
✅ 权限是否是 www-data
✅ 是否查看 error.log
如果你愿意,可以告诉我:
我可以直接帮你定位到具体配置问题。