文档首页> 技术教程> Apache 虚拟主机配置入门

Apache 虚拟主机配置入门

发布时间:2026-09-11 10:36        更新时间:2026-09-11 20:59
一台服务器要跑多个域名,Apache 的答案是虚拟主机(VirtualHost):按请求头里的 Host 字段决定交给哪个站点。Ubuntu/Debian 下管理虚拟主机有现成的 a2ensite 工具链,比手改主配置清晰得多。 一、目录约定 装完 apache2 后看 /etc/apache2/ 目录:sites-available/ 存放全部站点配置,这里的文件并不生效;sites-enabled/ 存放已启用站点的软链接,Apache 只读这个目录。主配置里的 IncludeOptional sites-enabled/*.conf 完成加载。设计意图是配置库与启用集分离:下线站点删软链即可,配置本体留着随时恢复,这正是比"改完就删"高明的地方。公共配置还有第三层去处:conf-available 配合 a2enconf 启用,证书、全站跳转这类共用配置放那里,与站点配置解耦。 二、创建一个站点 写 /etc/apache2/sites-available/blog.conf: ``` ServerName blog.example.com DocumentRoot /var/www/blog ``` DocumentRoot 指向站点根目录。日志建议按站点分开,补两行 ErrorLog 与 CustomLog 并带上站名,出问题时不会混在默认站点的日志里互相干扰。多个域名指向同一站点用 ServerAlias 补充,一行写一个或空格分隔。 三、启用与验证 ``` sudo a2ensite blog sudo apachectl configtest sudo systemctl reload apache2 ``` a2ensite 做的事就是在 sites-enabled 建软链接;a2dissite blog 删软链接下线站点。configtest 输出 Syntax OK 才继续,这条纪律和 Nginx 的 -t 一样。排错还有个好用的命令:apachectl -S 列出当前所有虚拟主机的端口与域名,哪个站点没加载一眼可见。域名还没解析时也能验证:curl -sI -H "Host: blog.example.com" http://服务器IP/ ,返回头正确说明站点配置已生效,等解析到位直接无缝切换。 四、常见报错 - 访问总落到默认站点:ServerName 与请求的域名不一致,或改完忘了 reload。 - AH00558 告警:提示无法可靠确定服务器全名,无害。新建 /etc/apache2/conf-available/servername.conf 写入 ServerName localhost,再 a2enconf servername 即消除。 - 403 Forbidden:检查 DocumentRoot 路径上每一级目录的执行权限(都需要 x),以及配置里是否有 Require all granted 的授权段。 收尾建议:每个站点配置独立、日志独立,是排错效率的地基。一开始就按这个习惯建,别把多个域名挤进一个配置文件,出了问题分不清谁是谁的。