您好我正在尝试为一个有两个子域的网站提供服务,这两个子域都应该在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显示语法OK。
似乎问题是使用SSL命名为虚拟主机。我已经在线检查了3个指南并尝试了各种各样的事情(使用* .domain.com作为ServerName,两者,app.domain.com作为ServerAlias),子域名作为指令(app.domain.com:443)但是可以' t找出正确的组合,只使用一个IP地址为80和443下的每个子域服务。
我知道这是可能的。关于我缺少的任何想法?
答案 0 :(得分:1)
检查您正在使用的apache版本。可能是你的apache太旧而无法支持它。我认为在apache 2.2.12及更高版本中支持sni。
答案 1 :(得分:0)
我能找到的唯一一个不是很好的解决方案就是在CentOS 6.4上重建。 Russ指出的问题是内置的Apache / OpenSSL不支持SNI。我设法在5.9中升级了OpenSSL,但我无法使用SNI构建Apache。我使用指南编译它,显示要使用的标志,但它没有工作。这并不是说它无法完成,我可能做错了,这更容易,因为它适用于新网站,停机时间不是问题。
问题得到纠正后,error_log中的警告会更改为:
[warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
感谢您的帮助!