Como desativar o VirtualHost padrão no apache2?

9

No apache2 por design, qualquer solicitação http com um host desconhecido será direcionada para o primeiro VirtualHost carregado. Existe uma maneira de desativar esse recurso? Dito de forma diferente, eu quero ter um servidor web onde o usuário só pode chegar a definições explicitamente chamadas de VirtualHost. Qualquer outro nome de host não mencionado explicitamente em uma linha ServerName ou ServerAlias deve ser silenciosamente ignorado.

Isso é possível?

Listen 80
NameVirtualHost *

<VirtualHost _default_:*>
# Anything matching this host should be silently ignored.
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>

Atualização: Conforme sugerido abaixo e em outros lugares, ignorar silenciosamente uma solicitação pode não ser uma boa ideia e talvez quebre as RFCs para HTTP. No entanto, como os hosts virtuais são projetados para simular vários servidores HTTP físicos separados, a abordagem silenciosa do ignore não parece irracional para mim. Seria o mesmo que a hospedagem virtual baseada em IP e o firewall de alguns IPs (talvez não para todos os clientes).

    
por Harvey 20.02.2010 / 16:55

2 respostas

4

Não tenho certeza se "falhar silenciosamente" é uma boa ideia. Você deve dar ao cliente pelo menos alguma indicação do que aconteceu. Talvez você possa enviar um erro "ido" do http 410. Algo como isso deve fazer o truque:

RewriteRule ^.*$ - [G]

Além disso, você deve ser capaz de especificar um documento de erro 410 personalizado, que poderia ser apenas uma página html em branco.

    
por 20.02.2010 / 17:38
11

Aqui está uma maneira alternativa que não envolve regras de reescrita:

<VirtualHost _default_:*>
    <Location />
        Deny from all
        Options None
        ErrorDocument 403 Forbidden.
    </Location>
</VirtualHost>
    
por 22.10.2015 / 18:07