不存在子域名转发至下一个虚拟主机

不存在子域名转发至下一个虚拟主机
  • 服务器:Debian 9
  • 网络服务器:Apache2

我的 DNS A 记录是 *.domain.tld 到我的 IP 我通过宏解决我的 apache vhosts。如果我输入不存在的子域,它将显示下一个 vhost 文件的页面,而不是默认页面或错误。

这是我的 000-default.conf

        ServerSignature Off
<Directory /home>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

        <VirtualHost *:80>
                DocumentRoot /var/www
        </VirtualHost>



<Macro Host $name $domain>
        <VirtualHost $domain:80>
                ServerName $domain
                ServerAlias www.$domain

                DocumentRoot /home/$name/html
                AssignUserID $name $name
                CustomLog /home/$name/logs/access.log vhost_combined
                ErrorLog /home/$name/logs/error.log
                <Directory /home/$name/html>
                        php_admin_value open_basedir /home/$name/html/:/var/lib/php/:/usr/share/php/:/usr/sbin/sendmail:/tmp
                        php_admin_value upload_tmp_dir /home/$name/html/tmp/
                        php_value upload_max_filesize 500M
                        php_value post_max_size 525M
                        php_value memory_limit 2000M
                        php_flag "output_buffering" Off
                </Directory>
        </VirtualHost>
</Macro>

<Macro SSLHost $name $domain>
<IfModule mod_ssl.c>
        <VirtualHost $domain:443>
                ServerName $domain
                ServerAlias www.$domain
                Alias /analytics /home/matomo/html

                DocumentRoot /home/$name/html
                AssignUserID $name $name
                CustomLog /home/$name/logs/access.log vhost_combined
                ErrorLog /home/$name/logs/error.log
                <Directory /home/$name/html>
                        php_admin_value open_basedir /home/$name/html:/var/lib/php/:/usr/share/php/:/usr/sbin/sendmail:/tmp
                        php_admin_value upload_tmp_dir /home/$name/html/tmp
                        php_value upload_max_filesize 500M
                        php_value post_max_size 525M
                        php_value memory_limit 2000M
                        php_flag "output_buffering" Off
                </Directory>
                Include /etc/letsencrypt/options-ssl-apache.conf
                ServerAlias $domain
                SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
                SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
        </VirtualHost>
</IfModule>

并作为宏 vhost 的示例(001-sub.domain.tld.conf:

Use Host myXYuser sub.domain.tld
Use SSLHost myXYuser sub.domain.tld

因此,例如现在 sub.domain.tld 存在,当我输入“xy.domain.tld”时,它会显示 sub.domain.tld。我该如何避免这种情况?

提前致谢,

答案1

Apache 2.4 VirtualHost 示例

星号匹配所有地址,因此主服务器不处理任何请求。由于 ServerName 为 www.example.com 的虚拟主机在配置文件中位于首位,因此它具有最高优先级,可视为默认或主服务器。这意味着,如果收到的请求与指定的 ServerName 指令之一不匹配,则将由该首位服务器处理。

您的第一个具有ServerName指令的实例将满足每个无效请求(指定为ServerName)。

相关内容