Da documentação do apache em Como o servidor seleciona o virtual virtual baseado em nome host
The default name-based vhost for an IP and port combination
If no matching ServerName or ServerAlias is found in the set of virtual hosts containing the most specific matching IP address and port combination, then the first listed virtual host that matches that will be used.
Então, quando você apontar seu DNS para o seu inexistente "foo.test.com", suas solicitações HTTP estão contendo uma entrada de cabeçalho host: foo.test.com
, o apache não pode corresponder isso a um dos seus VHOSTS, então ele sempre atende ao primeiro arquivo encontrado contendo um contêiner VHOST .
Como os arquivos são listados alfabeticamente, o primeiro arquivo será aquele com a lista alfabética mais baixa.
Então, na verdade, se seus VHOSTs - ou mais importante, seus nomes de arquivos foram:
- vhost1
- vhost2
vhost1 sempre será servido se o apache não puder corresponder a solicitação a um determinado VHOST por endereço IP ou nome de host.
Sim, isso é bastante alarmante quando você o descobre pela primeira vez, é por isso que alguns pacotes do apache definirão um host virtual padrão com um nome de arquivo de 000_default_vhost
.
Dessa forma, você pode ter certeza de que este VHOST sempre será atendido se uma solicitação não corresponder a seus VHOSTs por hostname ou IP.
Você deve considerar configurar seu servidor dessa maneira, onde o 000_default_vhost
sempre rejeitará solicitações com um 404, pois elas obviamente não são destinadas a seus domínios "apropriados".
Se isso parecer um comportamento irracional para o apache, observe que o nginx se comporta da mesma maneira.
se você estava usando o nginx e queria impedir o processamento de pedidos com nomes de servidor indefinidos
Você também pode definir um servidor que apenas elimine as solicitações:
server {
listen 80;
server_name "";
return 444;
}
e coloque-o em um arquivo que aparece primeiro em ordem alfabética, ou seja, /etc/nginx/sites-available/000_catchall