Apache支持通过“端口+域名”双重维度区分多站点,需显式声明Listen端口、为每个<VirtualHost IP:PORT>块配置唯一ServerName、添加Directory权限控制,并经configtest验证后reload生效。

Apache 支持在同一台服务器上通过“端口 + 域名”双重维度区分多个站点,适用于开发测试、内网服务隔离或对外提供差异化访问入口(如管理后台走 8080、API 接口走 8000、主站走 80)。关键在于:端口监听需显式声明,域名匹配依赖 ServerName 和 ServerAlias,且每个 <VirtualHost> 块必须唯一对应一个 IP:PORT 组合。
一、启用多端口监听并确认模块加载
Apache 默认只监听 80(HTTP)和 443(HTTPS),添加新端口需手动注册。编辑主配置文件(如 /etc/httpd/conf/httpd.conf 或 /etc/apache2/ports.conf),在 Listen 指令区域追加所需端口:
-
Listen 80(保持默认) -
Listen 8000(例如 API 站点) -
Listen 8080(例如后台系统) -
Listen 8443(非标准 HTTPS,避免与 443 冲突)
确保 mod_ssl(HTTPS)、mod_rewrite(重定向)、mod_headers(响应头控制)等扩展模块已启用(检查 LoadModule 行是否取消注释)。
二、按端口+域名组合编写虚拟主机配置
每个站点需独立定义 <VirtualHost IP:PORT> 块,不能混用相同端口的多个 ServerName(那属于基于名称的虚拟主机,不依赖端口)。示例配置(放入 /etc/httpd/conf.d/vhosts.conf 或 /etc/apache2/sites-available/multi.conf):
站点 A(主站,80 端口):
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example
<Directory "/var/www/example">
Require all granted
AllowOverride All
</Directory>
ErrorLog /var/log/httpd/example-error.log
CustomLog /var/log/httpd/example-access.log combined
</VirtualHost>站点 B(API 服务,8000 端口):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:8000>
ServerName api.example.com
DocumentRoot /var/www/api
<Directory "/var/www/api">
Require all granted
# 可额外限制仅允许特定来源调用
<RequireAny>
Require ip 192.168.1.0/24
Require ip 203.0.113.5
</RequireAny>
</Directory>
ErrorLog /var/log/httpd/api-error.log
CustomLog /var/log/httpd/api-access.log combined
</VirtualHost>站点 C(HTTPS 后台,8443 端口):
<VirtualHost *:8443>
ServerName admin.example.com
DocumentRoot /var/www/admin
SSLEngine on
SSLCertificateFile /etc/ssl/certs/admin.crt
SSLCertificateKeyFile /etc/ssl/private/admin.key
<Directory "/var/www/admin">
Require all granted
</Directory>
</VirtualHost>注意:*:8000 表示监听所有 IPv4 地址的 8000 端口;若需绑定特定 IP(如仅内网访问),可写成 192.168.1.100:8000。
三、目录权限与安全强化要点
Apache 2.4+ 强制要求显式授权目录访问,遗漏会导致 403 Forbidden 错误:
- 每个
<Directory>块中必须包含Require all granted(开放全部访问)或更精细策略(如Require ip) - 若启用
.htaccess覆盖功能,AllowOverride All不可省略;否则设为None提升性能 - 敏感目录(如
/var/www/admin)建议禁用目录浏览:Options -Indexes - 日志路径建议使用绝对路径,避免因工作目录变化导致写入失败
四、验证与生效流程
配置完成后必须逐级验证,避免语法错误导致 Apache 启动失败:
- 检查语法:
sudo apachectl configtest(Linux)或httpd -t(CentOS) - 重载配置(不中断服务):
sudo systemctl reload httpd或sudo service apache2 reload - 确认端口监听:
sudo ss -tlnp | grep ':80\|:8000\|:8080' - 本地测试:修改本机
/etc/hosts添加映射,如127.0.0.1 www.example.com api.example.com admin.example.com,再用浏览器或curl -v http://www.example.com:80、curl -k https://admin.example.com:8443测试 - 防火墙放行:如使用 firewalld,执行
sudo firewall-cmd --permanent --add-port=8000/tcp并重载规则
正式上线前,务必完成 DNS 解析配置,将各域名 A 记录指向服务器公网 IP,并确保云服务商安全组/防火墙开放对应端口。

















