apache基于域名的虚拟主机通过http请求头host字段实现单ip多域名,需启用配置、监听端口、设好目录权限、编写virtualhost块并启用,最后验证访问。

Apache 基于域名的虚拟主机,核心是让同一台服务器用同一个 IP 和端口(比如 80 或 443)响应多个不同域名的请求,靠的是 HTTP 请求头里的 Host 字段。配置不难,但几个关键环节漏掉一个,就会 404 或 403。
确认主配置已启用虚拟主机支持
Apache 默认不会自动加载 VirtualHost 配置,必须手动打开入口:
- 编辑主配置文件:
/etc/apache2/apache2.conf(Ubuntu/Debian)或/etc/httpd/conf/httpd.conf(CentOS/RHEL) - 找到类似
IncludeOptional sites-enabled/*.conf或Include conf/extra/httpd-vhosts.conf的行,去掉前面的#取消注释 - 确保已声明监听端口,例如添加或确认存在:
Listen 80(HTTP)或Listen 443(HTTPS) - 执行
sudo apache2ctl -t或sudo httpd -t检查语法,看到 Syntax OK 才继续
为每个域名准备独立网站目录和权限
目录路径要明确,且 Apache 进程(如 www-data 或 apache 用户)必须能读取内容并进入目录,否则返回 403 Forbidden:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 创建站点根目录,例如:
sudo mkdir -p /var/www/example.com/public_html - 放入测试页:
echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html - 设置所有权:
sudo chown -R $USER:www-data /var/www/example.com - 设置基础权限:
sudo chmod -R 755 /var/www/example.com
编写域名对应的 VirtualHost 配置块
每个域名(含子域名)建议单独写一个 <virtualhost></virtualhost> 块,结构清晰、便于管理:
- 在
/etc/apache2/sites-available/example.com.conf(Debian系)或/etc/httpd/conf/extra/httpd-vhosts.conf(RHEL系)中添加:
ServerName example.com
ServerAlias www.example.com
DocumentRoot "/var/www/example.com/public_html"
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
-
ServerAlias可写多个,空格分隔;AllowOverride All启用 .htaccess;Require all granted是 Apache 2.4+ 必须项
启用配置并验证访问
配置写完不等于生效,还需激活和验证:
- Debian/Ubuntu:运行
sudo a2ensite example.com.conf,再sudo systemctl reload apache2 - RHEL/CentOS:直接
sudo systemctl reload httpd(前提是配置已放在被 Include 的路径下) - 本地测试时,在
/etc/hosts添加:127.0.0.1 example.com www.example.com - 浏览器访问
http://example.com,看到测试页即成功;检查日志可定位问题:tail -f /var/log/apache2/example.com_error.log










