我想提供支持SNI的客户端,它们发送错误的主机名为400坏蛋请求,但是Apache总是在这种情况下提供默认的虚拟主机。我无法添加发送400坏请求状态的默认虚拟主机,因为禁用SNI的客户端将始终获得此虚拟主机。
当我在启用SNI的Apache安装上启用基于名称的虚拟主机时,似乎忽略了禁用SNI的客户端的ServerName虚拟主机指令。
请参见以下虚拟主机配置:
NameVirtualHost 192.168.4.46:443
<VirtualHost 192.168.4.46:443>
ServerName 192.168.4.46
DocumentRoot /var/www/error-page/
SSLEngine on
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/certificate.key
</VirtualHost>
<VirtualHost 192.168.4.46:443>
ServerName test-ssl
DocumentRoot /var/www/valid-website/
SSLEngine on
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/certificate.key
</VirtualHost>如果我使用禁用SNI的客户端,无论请求中发送的主机:头是什么,我都会得到错误页面。因为我在两个虚拟主机中使用相同的证书,所以我希望禁用SNI的客户端仍然能够基于与ServerName的匹配到达第二个虚拟主机。
如果我切换虚拟主机的位置,网站将是默认的虚拟主机,然后启用SNI的客户端将得到网站而不是错误,如果他们提供了一个错误的主机:在标题中。
因此,基本上,我如何让Apache为每个错误的主机提供错误:头,而不管SNI支持如何,同时在使用禁用SNI的客户端时仍然为网站服务,在使用启用SNI的客户端时为正确的虚拟主机提供服务?
发布于 2014-02-25 17:15:15
我相信最短的答案是:
设置cond以检查主机标头;如果不正确,请将请求转发到错误页。
您的非错误站点将是默认的,重写规则将驻留在此虚拟主机中。
如果确实存在“更短/更容易”的选项,我怀疑此选项将为如何处理请求提供明确的逻辑。此解决方案假定您希望所有请求,而不管SNI状态如何,为给定的虚拟主机提供匹配的主机头。
发布于 2014-02-25 17:06:19
删除要在错误模式下使用的ServerName。它应该能工作
https://serverfault.com/questions/578196
复制相似问题