Apache基于端口的虚拟主机核心是为每个站点绑定唯一IP:PORT组合并显式声明Listen端口,每个<VirtualHost *:PORT>块须独立配置DocumentRoot、Directory权限及日志路径,最后通过configtest验证并reload生效。

Apache 中配置基于不同端口的虚拟主机,核心是让每个站点绑定唯一的 IP:PORT 组合,并确保 Apache 实际监听这些端口。它不依赖域名匹配(那是基于名称的虚拟主机),而是靠端口号区分请求流向。
明确声明要监听的端口
Apache 默认只监听 80 和 443,新增端口必须显式写入主配置。编辑 /etc/apache2/ports.conf(Debian/Ubuntu)或 /etc/httpd/conf/httpd.conf(CentOS/RHEL),在 Listen 区域添加所需端口:
-
Listen 80(主站,通常保留) -
Listen 8000(例如 API 服务) -
Listen 8080(例如后台管理系统) -
Listen 8443(非标准 HTTPS,避免与 443 冲突)
注意:不要重复写 NameVirtualHost *:8000 这类旧指令(Apache 2.4+ 已废弃),只要 Listen 存在且 <VirtualHost *:8000> 块存在,即可生效。
为每个端口单独定义 VirtualHost 块
每个端口对应一个独立的 <VirtualHost *:PORT> 块,不能把多个 ServerName 塞进同一个端口的块里——那样属于基于域名的虚拟主机,不是端口区分。
示例(8000 端口 API 站点):
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
<VirtualHost *:8000>
ServerName api.example.com
DocumentRoot /var/www/api
<Directory "/var/www/api">
Require all granted
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/api-error.log
CustomLog /var/log/apache2/api-access.log combined
</VirtualHost>
同理,再写一个 <VirtualHost *:8080> 块指向后台目录,端口不同、路径不同、日志路径也建议分开。
权限与目录控制不能省略
Apache 2.4 起默认拒绝所有访问,<Directory> 块中的权限控制是必需的。常见组合:
-
Require all granted—— 允许所有来源访问 -
AllowOverride None—— 禁用 .htaccess(提升性能和安全性) -
Options -Indexes—— 关闭目录列表,防止敏感文件暴露
DocumentRoot 对应的物理目录需存在,且 Apache 进程(如 www-data 或 apache)对该目录有读取权限。
验证并重载配置
配置完成后,务必执行两步再重启:
-
sudo apache2ctl configtest(Debian/Ubuntu)或sudo httpd -t(CentOS/RHEL)—— 检查语法是否正确 -
sudo systemctl reload apache2或sudo systemctl reload httpd—— 优雅重载,不中断已有连接
测试时直接用 curl http://localhost:8000 或浏览器访问 http://your-server-ip:8080,确认返回对应站点内容即可。

















