我已经设置了一个 Debian LAMP 服务器,用于托管多个网站。据我所知,我只能在其中一个网站上使用 SSL,如果我想在两个或更多网站上使用 SSL,我必须添加另一个 IP - 到目前为止一切顺利。
问题是,每当我输入https://siteone.com
或时,https://sitetwo.com
它总是显示来自的内容:https://siteone.com
。我宁愿它显示一些错误消息或其他内容,但绝对不显示我的主要网站的内容(我希望 SSL 在那里工作)。
注意:我的 Debian 网络服务器使用 ispconfig 作为其控制面板。
答案1
确保正确设置虚拟主机,以便每个虚拟主机仅绑定到单个 IP 地址。基于 IP 的虚拟主机的 Apache 文档说你的虚拟主机应该类似于以下内容:
<VirtualHost 192.168.0.1:443>
ServerAdmin [email protected]
DocumentRoot /groups/smallco/www
ServerName smallco.example.com
ErrorLog /groups/smallco/logs/error_log
TransferLog /groups/smallco/logs/access_log
</VirtualHost>
<VirtualHost 192.168.0.2:443>
ServerAdmin [email protected]
DocumentRoot /groups/baygroup/www
ServerName baygroup.example.com
ErrorLog /groups/baygroup/logs/error_log
TransferLog /groups/baygroup/logs/access_log
</VirtualHost>
您的 apache 配置中列出的第一个虚拟主机是默认主机。在前两个虚拟主机之前添加一个虚拟主机,以确保您确实匹配虚拟主机,而不是盲目地落入第一个虚拟主机。以下是 IBM 提供的有关此类设置的更完整的文章:http://www-01.ibm.com/support/docview.wss?uid=swg21045922
答案2
答案3
如果 Stephen 的建议对您不太适用,那么请确保您的 apache 配置文件中还包含以下行:
NameVirtualHost *:443
此外,FRB 是对的。您可以在任意数量的虚拟机上使用 SSL。只需将 SSL 配置信息放入<VirtualHost></VirtualHost>
代码块中即可。
类似这样(还请注意,使用命名主机时不需要绑定到特定 IP):
## SSL (HTTPS) PORT 443
Listen 443
NameVirtualHost *:443
LoadModule ssl_module modules/mod_ssl.so
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost *:443>
ServerName host1.com
SSLEngine on
SSLOptions +StrictRequire
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
SSLCertificateFile /etc/httpd/ssl/host1.crt
SSLCertificateKeyFile /etc/httpd/ssl/host1.key
SSLVerifyClient none
SSLProxyEngine off
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
DocumentRoot /var/www/host1/
<Directory "/var/www/host1/">
Options Indexes FollowSymLinks
AllowOverride All
Order Allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerName host2.com
SSLEngine on
SSLOptions +StrictRequire
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
SSLCertificateFile /etc/httpd/ssl/host2.crt
SSLCertificateKeyFile /etc/httpd/ssl/host2.key
SSLVerifyClient none
SSLProxyEngine off
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
DocumentRoot /var/www/host2/
<Directory "/var/www/host2/">
Options Indexes FollowSymLinks
AllowOverride All
Order Allow,deny
Allow from all
</Directory>
</VirtualHost>
答案4
实际上,您可以在同一个 IP 地址上建立多个 SSL 站点,而无需使用 SNI。(主要)问题是您必须使用相同的证书,该证书必须具有所有必需的域作为主题备用名称。(这将使证书费用增加。)这意味着所有站点都属于同一组织。
Apache2 处理 SSL 分为两个阶段。第一阶段涉及检查 IP 地址的默认(第一个)虚拟主机块中是否存在“SSLEngine on”语句,然后启动 SSL 连接。第二阶段涉及检查 ServerName/ServerAlias 指令,直到识别出正确的虚拟主机。
因此,您实际上不需要在每个虚拟主机中重复 SSL* 指令,但它有助于引起人们的注意,让他们注意到它是一个 SSL 站点。(否则他们必须注意端口号。)
第二个问题是,每次 Apache 启动时,都会向 error_log 中添加一条警告。