您好,我正在尝试为一个站点提供两个子域,并且两个子域都应使用 SSL。我已经购买并安装了通配符 SSL 证书。在我的 vhosts 文件中,我有 5 个定义,www (80)、app (80/443) 和 staging (80/443)。所有子域都在端口 80 下工作。
这是我的 vhosts.conf 文件的片段:
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
ServerAdmin support@---
ServerName app.---
DocumentRoot /var/www/vhosts/---/app/www/
ErrorLog /var/www/vhosts/---/app/log/error.log
<Directory "/var/www/vhosts/---/app/www">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin support@---
ServerName app.---
DocumentRoot /var/www/vhosts/---/app/www/
ErrorLog /var/www/vhosts/---/app/log/ssl.log
SSLEngine ON
SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key
SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt
<Directory "/var/www/vhosts/---/app/www">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin support@---
ServerName staging.---
DocumentRoot /var/www/vhosts/---/staging/www/
ErrorLog /var/www/vhosts/---/staging/log/error.log
<Directory "/var/www/vhosts/---/staging/www">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin support@---
ServerName staging.---
DocumentRoot /var/www/vhosts/---/staging/www/
ErrorLog /var/www/vhosts/---/staging/log/ssl.log
SSLEngine ON
SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key
SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt
<Directory "/var/www/vhosts/---/staging/www">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
如果我改变这一行:
<VirtualHost *:443>
收件人:
<VirtualHost SERVER_IPADDRESS:443>
第一个定义将按预期工作并使用正确的证书。当我重新启动 Apache 时,我在终端中收到一条消息,指出存在重复的条目,并且只会使用第一个条目。
使用上面的 conf,我没有在终端中收到任何错误或警告,但我在 Apache 的日志中看到了这一点:
[warn] Init: You should not use name-based virtual hosts in conjunction with SSL!!
根据我在网上阅读的内容,警告是预料之中的,应该不是问题。
运行 configtest 显示语法正常。
问题似乎是使用 SSL 命名的虚拟主机。我已经在线检查了 3 个指南并尝试了各种方法(使用 *.domain.com 作为服务器名称,app.domain.com 作为 ServerAlias),子域作为指令(app.domain.com:443)但是不能不要找出正确的组合来仅使用一个 IP 地址为 80 和 443 下的每个子域提供服务。
我知道这是可能的。关于我遗漏的任何想法?
最佳答案
检查您使用的 apache 版本。可能是你的apache太老了,不支持。我认为 sni 在 apache 2.2.12 及更高版本中得到支持。
关于apache - 在 Apache 2.2.3/CentOS 5.9 上使用 SSL 的基于名称的虚拟主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20472872/