- 服务器: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
星号匹配所有地址,因此主服务器不处理任何请求。由于 ServerName 为 www.example.com 的虚拟主机在配置文件中位于首位,因此它具有最高优先级,可视为默认或主服务器。这意味着,如果收到的请求与指定的 ServerName 指令之一不匹配,则将由该首位服务器处理。
您的第一个具有ServerName
指令的实例将满足每个无效请求(指定为ServerName
)。