
apache 会按顺序匹配 virtualhost,当 ssl 配置文件错误监听在 *:80 而非 *:443 时,该配置会劫持所有未明确匹配的 http 请求(包括其他域名),导致多站点共用同一 documentroot。
apache 会按顺序匹配 virtualhost,当 ssl 配置文件错误监听在 *:80 而非 *:443 时,该配置会劫持所有未明确匹配的 http 请求(包括其他域名),导致多站点共用同一 documentroot。
在 Apache 中,VirtualHost 的匹配逻辑严格依赖 IP:端口 + ServerName 组合。若多个
本例中,phpmyadmin_ssl.conf 错误地配置为
- https://phpmyadmin.aws1.company.de 应由 *:443 的 phpmyadmin_ssl.conf 处理;
- 但原配置中 phpmyadmin_ssl.conf 实际监听 *:80,因此 Apache 在 *:443 上找不到匹配项;
- 此时 Apache 退回到 *:443 下第一个定义的 VirtualHost —— 即 test_api_konfigurator_ssl.conf(因其
是唯一正确监听 443 的配置),导致所有 HTTPS 请求(无论 Host 头为何)均被路由至 /var/www/company/... 目录。
✅ 正确修复方式是将 phpmyadmin_ssl.conf 的监听端口明确改为 *:443,并确保其 ServerName 唯一且与 DNS 解析一致:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
<virtualhost>
ServerName phpmyadmin.aws1.company.de
DocumentRoot /usr/share/phpmyadmin
SSLEngine on
SSLCertificateFile "/etc/ssl/certs/company/hoster_cert"
SSLCertificateKeyFile "/etc/ssl/certs/company/hoster_key"
<directory>
Require all granted
Options FollowSymLinks
AllowOverride All
</directory>
ErrorLog ${APACHE_LOG_DIR}/phpmyadmin_error.log
CustomLog ${APACHE_LOG_DIR}/phpmyadmin_access.log combined
</virtualhost>
⚠️ 同时注意以下关键点:
- 所有 *:443 的 VirtualHost 必须启用 SSLEngine on,否则 Apache 启动会报错;
- *:80 的配置中禁止出现 SSLEngine 指令(语法错误);
- 使用 sudo apache2ctl -S 验证当前生效的 VirtualHost 映射,输出中应清晰列出每个 *:80 和 *:443 的 ServerName 及 DocumentRoot;
- 修改后务必执行 sudo systemctl reload apache2(而非 restart),以避免连接中断;
- 若启用 HTTP/HTTPS 混合重定向(如 http → https),需确保 *:80 配置中仅含 RewriteRule,不包含 SSL 相关指令。
最终,四个 VirtualHost 应严格按端口分离:
- *:80:仅处理纯 HTTP 请求,含 RewriteRule 强制跳转;
- *:443:仅处理 HTTPS 请求,每个域名独占一个
块,且 ServerName 不可重复。
如此配置后,https://phpmyadmin.aws1.company.de 将正确加载 /usr/share/phpmyadmin/,而 https://test.api.konfigurator.company.de 则加载其对应项目目录,彻底解决交叉响应问题。










