最常用的是基于域名的虚拟主机配置,通过http请求头中的host字段区分同一ip和端口下的多个站点,无需额外ip或端口,符合常规访问习惯。
apache 配置多个虚拟主机站点,核心是让同一台服务器根据请求的域名、ip 或端口,把流量分发到不同网站目录。最常用也最推荐的是基于域名的方式,无需额外 ip 或端口,符合常规访问习惯。
确认基础支持已启用
Apache 默认可能未加载虚拟主机相关模块或配置文件,需手动检查并激活:
- 打开主配置文件:
/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 错误:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 创建目录,例如:
sudo mkdir -p /var/www/site1.com/public_html和sudo mkdir -p /var/www/site2.com/public_html - 设置所有权(Linux/macOS):
sudo chown -R $USER:www-data /var/www/site1.com/public_html - 设置目录权限:
sudo chmod -R 755 /var/www/site1.com - 在每个
public_html下放一个测试页,比如index.html,内容为<h1>Site 1</h1>
编写基于域名的虚拟主机配置
这是主流做法,所有站点共用一个 IP 和 80 端口,靠 HTTP 请求头中的 Host 字段区分:
- 在
/etc/apache2/sites-available/(Debian系)或/etc/httpd/conf/extra/(RHEL系)中新建配置文件,如site1.com.conf - 填入如下结构(注意替换域名和路径):
ServerName site1.com
ServerAlias www.site1.com
DocumentRoot "/var/www/site1.com/public_html"
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/site1_error.log
CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
- 再建一个
site2.com.conf,内容类似,只改ServerName和DocumentRoot - 启用配置(Debian/Ubuntu):
sudo a2ensite site1.com.conf;RHEL/CentOS 则直接Include到主配置或使用ln -s软链到sites-enabled
验证与生效
配置写完不等于立刻可用,还需最后几步确认:
- 重启服务:
sudo systemctl restart apache2(Debian)或sudo systemctl restart httpd(RHEL) - 本地测试可先改
/etc/hosts,加两行:127.0.0.1 site1.com和127.0.0.1 site2.com - 浏览器分别访问
http://site1.com和http://site2.com,应显示各自首页 - 若出错,用
sudo apache2ctl -S查看 Apache 实际加载了哪些虚拟主机及其顺序










