首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SNI的Apache虚拟主机将忽略ServerName。

使用SNI的Apache虚拟主机将忽略ServerName。
EN

Server Fault用户
提问于 2014-02-25 16:59:20
回答 2查看 1.7K关注 0票数 0

我想提供支持SNI的客户端,它们发送错误的主机名为400坏蛋请求,但是Apache总是在这种情况下提供默认的虚拟主机。我无法添加发送400坏请求状态的默认虚拟主机,因为禁用SNI的客户端将始终获得此虚拟主机。

当我在启用SNI的Apache安装上启用基于名称的虚拟主机时,似乎忽略了禁用SNI的客户端的ServerName虚拟主机指令。

请参见以下虚拟主机配置:

代码语言:javascript
复制
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的客户端时为正确的虚拟主机提供服务?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2014-02-25 17:15:15

我相信最短的答案是:

MOD_REWRITE

设置cond以检查主机标头;如果不正确,请将请求转发到错误页。

您的非错误站点将是默认的,重写规则将驻留在此虚拟主机中。

如果确实存在“更短/更容易”的选项,我怀疑此选项将为如何处理请求提供明确的逻辑。此解决方案假定您希望所有请求,而不管SNI状态如何,为给定的虚拟主机提供匹配的主机头。

票数 0
EN

Server Fault用户

发布于 2014-02-25 17:06:19

删除要在错误模式下使用的ServerName。它应该能工作

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/578196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档