Apache支持同一IP、同一443端口下多HTTPS站点,需启用SNI并为每个独立配置SSLEngine、ServerName及对应证书文件,确保OpenSSL≥1.0.1且客户端支持SNI。
apache 无法让多个 https 站点共用同一个 443 端口 + 同一 ip 并各自使用不同证书,除非启用 sni(server name indication)并配合多域名证书或单域名证书按主机名区分。但严格来说,这不是“多个独立 443 端口”,而是“同一 443 端口上承载多个 https 站点”。你提到的“多站点独立 443 端口”在字面意义上不成立——443 就是唯一端口号,不能重复绑定为“多个独立”的 443。
明确前提:一个 IP 上跑多个 HTTPS 站点,只有两种合规路径
✅ 方案一:SNI + 多个 VirtualHost *:443(推荐,主流做法)
依赖客户端支持 SNI(所有现代浏览器和绝大多数工具都支持),Apache 在收到 TLS 握手时,根据 Client Hello 中的 Server Name 字段选择对应证书和配置。每个站点仍监听 *:443,但证书、域名、根目录彼此隔离。
- 确保 Apache 已加载
mod_ssl,且 OpenSSL 版本 ≥ 1.0.1(SNI 支持要求) - 每个
<virtualhost></virtualhost>块必须包含:ServerName(匹配证书 CN 或 SAN)、SSLCertificateFile、SSLCertificateKeyFile,建议加上SSLCertificateChainFile - 证书必须与
ServerName严格一致;若一个证书含多个域名(如通配符或 SAN),可复用,但不推荐混用不同业务站点 - 无需额外
Listen指令——443 默认已监听,只需确认ports.conf或主配置中有Listen 443
为什么不能真有“多个独立 443 端口”
❌ 端口是操作系统级资源,443 是一个数字,同一 IP 下无法被多个进程或同一进程的多个监听套接字重复绑定(除非 SO_REUSEPORT,但 Apache 不这样用)。所谓“多个 HTTPS 站点用 443”,本质是 Apache 在一个监听套接字上,靠 TLS 层的 SNI 字段做路由分发。
- 试图写多个
<virtualhost></virtualhost>是完全可行且标准做法,不是错误——它们共享端口,但逻辑独立 - 若强行用不同端口(如 443/8443/8081),那就不是“独立 443”,而是“多个 HTTPS 端口”,需额外
Listen和防火墙放行,用户访问也必须显式带端口(https://site.com:8443),体验差、不标准
实际配置示例(两个站点共用 443)
编辑 /etc/apache2/sites-available/site-a.conf:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:443>
ServerName a.example.com
DocumentRoot /var/www/a
SSLEngine on
SSLCertificateFile /etc/ssl/certs/a.crt
SSLCertificateKeyFile /etc/ssl/private/a.key
SSLCertificateChainFile /etc/ssl/certs/a-chain.pem
<Directory /var/www/a>
Require all granted
</Directory>
</VirtualHost>
再建 site-b.conf,仅改 ServerName b.example.com、证书路径、DocumentRoot 即可。
- 启用配置:
a2ensite site-a.conf site-b.conf - 语法检查:
apache2ctl configtest - 重启:
systemctl reload apache2
补充:若必须物理隔离端口(极少数场景)
比如测试环境需绕过 SNI 兼容性验证,或内网设备不支持 SNI,则可用非标端口:
- 在
ports.conf添加:Listen 8443、Listen 8081 - 各
<virtualhost></virtualhost>块中照常配SSLEngine on和证书 - 开放对应端口:
firewall-cmd --add-port=8443/tcp --permanent && firewall-cmd --reload - 注意:浏览器会警告证书名称不匹配(因 URL 含端口,但证书无端口信息),且无法用于生产对外服务

















