apache虚拟主机必须按访问方式(域名、端口或ip)明确区分逻辑,核心是监听声明、唯一virtualhost绑定和目录权限配置:需显式声明listen端口,每个项目对应独立virtualhost块,且directory内须设require all granted。

单机多项目部署时,Apache 虚拟主机不是“选一种方式就行”,而是要按实际访问方式明确区分逻辑——关键看你是用不同域名、不同端口,还是不同 IP 来隔离项目。配置核心就三点:监听声明、虚拟主机块唯一绑定、目录权限放开。
先确认监听端口是否已声明
Apache 默认只听 80 和 443,新增端口必须显式写进主配置。打开 /etc/apache2/ports.conf(Debian/Ubuntu)或 /etc/httpd/conf/httpd.conf(CentOS/RHEL),在 Listen 区域追加你需要的端口:
- 如果项目走不同域名(如 site-a.com / site-b.com),保持 Listen 80 即可,不用加新端口
- 如果项目走不同端口(如 admin.example.com:8080 / api.example.com:8000),必须加:
Listen 8080
Listen 8000 - Windows 用户注意:端口不能被其他程序占用(比如 Skype 常占 80),可用
netstat -ano | findstr :8080检查
按访问方式写 VirtualHost 块
每个项目对应一个独立的 <virtualhost></virtualhost> 块,不能多个项目共用同一 IP:PORT 组合,否则会冲突。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
基于域名(最常用):所有项目都走 80 端口,靠 Host 请求头区分
写法:<virtualhost></virtualhost>
必须配 ServerName site-a.com 和 ServerAlias www.site-a.com -
基于端口:适合无域名场景(如内网调试、CI/CD 预览)
写法:<virtualhost></virtualhost>
只需 ServerName(可填任意合法域名或 IP,仅作标识,不参与 DNS 解析) -
基于 IP:需服务器有多个 IP,较少见
写法:<virtualhost></virtualhost>
注意 Listen 也要写成 Listen 192.168.1.10:80
每个站点目录必须授权可读
Apache 2.4+ 默认拒绝所有访问,<directory></directory> 块里漏掉权限控制就会 403 错误。
- DocumentRoot 路径要绝对、存在、且 Apache 进程有执行(x)权限(Linux 下常属 www-data 或 apache 用户)
- 标准授权写法(别用旧版 Order/Allow):
<directory><br> Require all granted<br> AllowOverride All<br></directory>
- 若项目含 PHP,确保 mod_php 或 php-fpm 已启用;静态资源则无需额外模块
验证并生效
改完配置别急着重启,先语法检查:
- Ubuntu/Debian:
sudo apache2ctl -t - CentOS/RHEL:
sudo httpd -t - Windows:
httpd.exe -t(在 bin 目录下运行) - 输出 Syntax OK 后再 reload:
sudo systemctl reload apache2(或httpd) - 浏览器访问前,记得本地 hosts 文件加映射(如
127.0.0.1 site-a.com),或确保 DNS 已解析









