Apache2 虚拟主机匹配异常:https://my.domain.com被错误匹配到客户站点配置而非默认虚拟主机
Apache2 虚拟主机匹配异常:https://my.domain.com被错误匹配到客户站点配置而非默认虚拟主机
嘿,我来帮你捋清楚这个问题——你遇到的匹配异常,核心原因是你的默认HTTPS虚拟主机配置缺少关键的SSL设置,导致Apache根本不把它当成有效的HTTPS虚拟主机来处理。
咱们拆解下细节:
- Apache处理HTTPS请求时,要求每个监听443端口的
<VirtualHost>块必须包含SSLEngine on以及对应的证书配置(SSLCertificateFile、SSLCertificateKeyFile等),否则这个虚拟主机不会被纳入HTTPS请求的匹配池。 - 看你的
99-default.conf里的两个443端口虚拟主机块,完全没有任何SSL相关配置!这就意味着Apache直接跳过了这些配置,当你访问https://my.domain.com时,它只能去寻找第一个加载的、有效的<VirtualHost *:443>配置——也就是02-app-customer.conf里的那个(因为02开头的文件比99开头的加载更早),所以才出现了错误匹配的情况。 - 而HTTP(80端口)的请求正常,是因为80端口不需要SSL配置,你的默认虚拟主机配置是有效的,所以能被正确匹配。
解决方案
给99-default.conf里的两个443端口虚拟主机块补上完整的SSL配置(用你的通配符证书就行,因为它覆盖了my.domain.com和*.my.domain.com):
修改后的_default_:443块
<VirtualHost _default_:443> ServerName my.domain.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html # 新增必要的SSL配置 SSLEngine on SSLCertificateFile /etc/ssl/certs/wildcard.crt SSLCertificateKeyFile /etc/ssl/private/wildcard.key SSLCertificateChainFile /etc/ssl/certs/wildcard_chain.crt Redirect 404 / ErrorDocument 404 "Please choose subdomain" ErrorLog ${APACHE_LOG_DIR}/default_error.log CustomLog ${APACHE_LOG_DIR}/default_access.log combined </VirtualHost>
修改后的*.my.domain.com 443块
<VirtualHost *:443> ServerAlias *.my.domain.com # 新增必要的SSL配置 SSLEngine on SSLCertificateFile /etc/ssl/certs/wildcard.crt SSLCertificateKeyFile /etc/ssl/private/wildcard.key SSLCertificateChainFile /etc/ssl/certs/wildcard_chain.crt Redirect 404 / DocumentRoot /var/www/html/ ErrorDocument 404 "Subdomain does not exist" ErrorLog ${APACHE_LOG_DIR}/default_error.log CustomLog ${APACHE_LOG_DIR}/default_access.log combined </VirtualHost>
配置修改完成后,重启Apache服务:
systemctl restart apache2
此时再访问https://my.domain.com,就会正确匹配到99-default.conf里的对应虚拟主机了。另外补充一点:虽然虚拟主机是按文件名顺序加载,但只要你的默认HTTPS虚拟主机配置有效且ServerName明确匹配请求的域名,Apache会优先根据主机头完成匹配,不会受加载顺序的干扰。
备注:内容来源于stack exchange,提问作者Powerriegel
相关产品推荐
相关产品推荐

