拒绝对未明确配置的子域的请求

拒绝对未明确配置的子域的请求

我在我的 Apache 上托管了几个网站:

  • 域名-x.com
  • 域名-y.com
  • 测试域名-y.com

每个站点在 sites-available 中都有自己的文件。Domain-y 为两个站点提供服务,一个带有 ,domain-y.com另一个带有test.domain-y.com

域-x:

<VirtualHost *:80>
  ServerName domain-x.com
  Redirect permanent / https://domain-x.com/
</VirtualHost>

<VirtualHost <ip>:443>
    DocumentRoot /var/www/<folder>
    ServerName domain-x.com
    ServerAlias "domain-x.com" "www.domain-x.com"
</VirtualHost>

域-y:

<VirtualHost *:80>
  ServerName domain-y.com
  Redirect permanent / https://domain-y.com/
</VirtualHost>

<VirtualHost <ip>:443>
    DocumentRoot /var/www/<folder>
    ServerName domain-y.com
    ServerAlias "domain-y.com" "www.domain-y.com"
</VirtualHost>

测试域名-y.com

<VirtualHost *:80>
  ServerName test.domain-y.com
  Redirect permanent / https://test.domain-y.com/
</VirtualHost>

<VirtualHost <ip>:443>
    DocumentRoot /var/www/<folder>
    ServerName test.domain-y.com
    ServerAlias "test.domain-y.com" "www.test.domain-y.com"
</VirtualHost> 

这工作正常,但如果不需要,我想禁用 test.domain-y.com 并显示 404。如果我使用 a2dissite 删除站点并将子域站点称为“test.domain-y.com”,则会显示域“domain-y.com”,而不会显示 404。

所以我明白我需要一个捕获所有内容的功能,所以我创建了一个 00-catch.all.conf 来包含以下语句:

<VirtualHost *:80>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

但如果我启用全部捕获,那么子域名站点仍然可用。

有什么提示吗?

谢谢

答案1

首先,您必须确保 catch-all 是 Apache 检查的最后一个虚拟主机,如果它的命名00-catch.all.conf与您一样,那就应该没问题,然后我们必须检查您的虚拟主机是否覆盖所有必要的端口,分别为 和 的 80和catch-all443 。HTTPHTTPS

<VirtualHost *:80>
 ServerName default
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:443>
 ServerName default
 ServerAlias *
 SSLEngine on
 SSLCertificateFile "/etc/apache2/ssl/default.crt"
 SSLCertificateKeyFile "/etc/apache2/ssl/default.key"
 Redirect 404 /
</VirtualHost>

那么我假设您的服务器有一个默认的 SSL 证书来处理 HTTPS 请求,用它etc/apache2/ssl/default.crt替换。/etc/apache2/ssl/default.key

相关内容