我的网站邮件客户端的当前配置如下:
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
<Directory /var/www/mailclient>
AllowOverride All
</Directory>
DocumentRoot /var/www/mailclient
ServerName mail.*
ServerAlias mail.*
</VirtualHost>
当我尝试访问 https:// mail.domain1.com 或 https:// mail.domain2.com 时,一切正常。
但是当我尝试访问 https:// domain1.com 或 https:// sub.domain1.com 时,我仍然可以看到 Web 邮件客户端,但除了 404 或类似内容之外,我什么也不想看到。那么,如何才能将此虚拟主机限制为仅用于特定子域呢?
答案1
配置一个默认的虚拟主机,它将返回错误。它需要位于当前虚拟主机之上才能成为默认虚拟主机,但要位于配置之下NameVirtualHost
。
NameVirtualHost *:443
<VirtualHost *:443>
ServerName default.filler.name
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
<Location />
Order Allow,Deny
Deny from all
</Location>
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
<Directory /var/www/mailclient>
AllowOverride All
</Directory>
DocumentRoot /var/www/mailclient
ServerName mail.*
ServerAlias mail.*
</VirtualHost>
它将是 403 而不是 404。够接近了吗?
答案2
当 Apache 找不到正确的虚拟主机时,它将使用默认的 (*) 虚拟主机。
您可以使用默认虚拟主机来解决这个问题。
<VirtualHost _default_:443>
RedirectMatch permanent ^/?(.*) http://mymainwebsite.com/$1
</VirtualHost>
如果有人使用 IP 或其他子域连接到端口 443,这将阻止它弹出。