在 Ubuntu 上配置 Apache2 时,有几个常见但容易踩坑的点,下面按「必看 → 常见 → 进阶」给你总结一下,适合生产环境也适合个人服务器。
Ubuntu 下推荐用官方源:
sudo apt update
sudo apt install apache2
安装完成后确认状态:
sudo systemctl status apache2
Ubuntu 常用 ufw:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
否则你会发现 本机能访问,外网访问不了。
Ubuntu 的 Apache2 默认站点目录是:
/var/www/html
⚠️ 注意:
/etc/apache2/sites-available/000-default.conf 里的路径Ubuntu 的 Apache2 和 CentOS 不一样,配置是拆分的:
/etc/apache2/
├── apache2.conf # 主配置(一般不动)
├── ports.conf # 监听端口
├── sites-available/ # 可用站点
├── sites-enabled/ # 启用的站点(软链接)
├── mods-available/
├── mods-enabled/
✅ 正确做法
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.conf
sudo a2ensite example.conf
sudo systemctl reload apache2
❌ 错误做法
apache2.confln -s 不生效常用模块:
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers
sudo systemctl restart apache2
查看已启用模块:
apache2ctl -M
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
⚠️ 注意:
AllowOverride All 是 支持 .htaccess 的关键Require all granted 必须写,否则 403sudo a2enmod ssl
sudo a2ensite default-ssl
sudo apt install certbot python3-certbot-apache
sudo certbot --apache
✅ 自动:
但有 AppArmor
如果你遇到:
检查一下:
sudo aa-status
如果确认不是代码问题,可以临时测试:
sudo systemctl stop apparmor
⚠️ 生产环境不建议直接关,建议改 profile
sudo chown -R www-data:www-data /var/www/example
sudo chmod -R 755 /var/www/example
Apache 运行用户是:
www-data
| 问题 | 原因 |
|---|---|
| 403 Forbidden | 目录权限 / Require 没写 |
| .htaccess 不生效 | AllowOverride None |
| 端口无法访问 | 防火墙 |
| 改配置不生效 | 忘了 reload / restart |
| HTTPS 不生效 | 没开 ssl 模块 |
| 多个站点串了 | ServerName 没配 |
sudo apache2ctl configtest
sudo journalctl -u apache2
sudo tail -f /var/log/apache2/error.log
✅ 使用 虚拟主机 + HTTPS
✅ 禁用目录浏览:
Options -Indexes
✅ 隐藏服务器信息:
ServerTokens Prod
ServerSignature Off
✅ 开启 Gzip / HTTP/2(性能)
如果你愿意,可以告诉我:
我可以直接给你一份 可用配置文件模板。