Ubuntu 上 Apache 的部署、虚拟主机、SSL 与运维要点
一 安装与基础管理
- 更新索引并安装:sudo apt update && sudo apt install apache2 -y
- 启动与开机自启:sudo systemctl start apache2 && sudo systemctl enable apache2
- 常用管理:sudo systemctl status apache2;sudo systemctl reload apache2;sudo systemctl restart apache2
- 防火墙放行:sudo ufw allow ‘Apache Full’(如仅 HTTP/HTTPS 分别放行,可用 sudo ufw allow http、sudo ufw allow https)
- 访问验证:在浏览器打开 http://服务器IP 或 http://localhost,看到 Apache 欢迎页即正常
二 目录结构与配置文件
- 配置目录与作用
- /etc/apache2/apache2.conf:主配置文件
- /etc/apache2/ports.conf:监听端口(如 80/443)
- /etc/apache2/sites-available/:可用站点配置
- /etc/apache2/sites-enabled/:已启用站点的软链接
- /etc/apache2/mods-available/ 与 /etc/apache2/mods-enabled/:可用/已启用模块
- 常用模块管理
- 启用:sudo a2enmod 模块名(如 rewrite、ssl)
- 禁用:sudo a2dismod 模块名
- 日志路径
- 访问日志:/var/log/apache2/access.log
- 错误日志:/var/log/apache2/error.log
三 虚拟主机配置步骤
- 创建站点目录与示例页
- sudo mkdir -p /var/www/example.com/public_html
- echo “
Hello example.com
” | sudo tee /var/www/example.com/public_html/index.html
- 创建站点配置
- 启用站点与可选禁用默认站点
- sudo a2ensite example.com.conf
- 如需使用自定义站点为默认,可 sudo a2dissite 000-default.conf
- 检查语法并生效
- sudo apache2ctl configtest
- sudo systemctl reload apache2
- 权限建议
- 若由 www-data 运行:sudo chown -R www-data:www-data /var/www/example.com;sudo chmod -R 755 /var/www/example.com
四 启用 HTTPS 与自动化证书
- 安装 Certbot 并获取证书
- sudo apt install certbot python3-certbot-apache -y
- sudo certbot --apache -d example.com -d www.example.com
- 自动续期
- Certbot 默认会添加 systemd timer 或 cron 任务,定期自动续期;可用 sudo systemctl list-timers 检查
- 手动续期测试
- sudo certbot renew --dry-run
五 性能与安全优化
- 性能
- 启用压缩:sudo a2enmod deflate && sudo systemctl reload apache2
- 启用缓存(按需):sudo a2enmod cache;sudo a2enmod cache_disk;sudo systemctl reload apache2
- 安全
- 隐藏版本信息:在 /etc/apache2/apache2.conf 或相应配置段加入
- ServerTokens Prod
- ServerSignature Off
- 禁用目录列表:在 Directory 段使用 Options -Indexes
- 进阶防护(可选):sudo apt install libapache2-mod-security2 libapache2-mod-evasive;sudo a2enmod security2;sudo a2enmod evasive;sudo systemctl reload apache2
- 故障排查
- 语法检查:sudo apache2ctl configtest
- 实时查看错误日志:sudo tail -f /var/log/apache2/error.log