multiple ssl virtual hosts on apache(apache多ssl站点配置)

in 默认分类 with 0 comment

前言

其实是一个网上随便搜都一大堆的问题了,但是一些教程在apache版本小于2.4是无法生效的,这篇文章就是专门为apache版本小于2.4而写的。

问题表现

配置了多个VirtualHost *:443,但是只有一个可以生效
配置大概是这样的

<VirtualHost *:443>
        ServerName a.example.com
        SSLEngine on
        SSLCertificateFile      /path/to/hunsh1.crt
        SSLCertificateKeyFile   /path/to/hunsh1.key
        SSLCertificateChainFile /path/to/hunsh1.crt
</VirtualHost>
<VirtualHost *:443>
        ServerName b.example.com
        SSLEngine on
        SSLCertificateFile      /path/to/hunsh2.crt
        SSLCertificateKeyFile   /path/to/hunsh2.key
        SSLCertificateChainFile /path/to/hunsh2.crt
</VirtualHost>

访问a.example.com可以正常,访问b.example.com放回a的内容并且是a的证书,仿佛b没有被配置,如果ab顺序前后颠倒,现象也会反着来。

问题解决

反复查找最后在 https://stackoverflow.com/questions/26018680/multiple-ssl-virtual-hosts-on-apache 的评论区找到了答案,apache2.4 以下需要添加一行

NameVirtualHost *:443

于是最终的配置长这样

NameVirtualHost *:443
<VirtualHost *:443>
        ServerName a.example.com
        SSLEngine on
        SSLCertificateFile      /path/to/hunsh1.crt
        SSLCertificateKeyFile   /path/to/hunsh1.key
        SSLCertificateChainFile /path/to/hunsh1.crt
</VirtualHost>
<VirtualHost *:443>
        ServerName b.example.com
        SSLEngine on
        SSLCertificateFile      /path/to/hunsh2.crt
        SSLCertificateKeyFile   /path/to/hunsh2.key
        SSLCertificateChainFile /path/to/hunsh2.crt
</VirtualHost>

问题解决

Responses