problemas de configuração do apache, último vhost carregado se torna domínio curinga

0

Eu tenho 2 hosts virtuais carregados de 2 arquivos conf separados em /etc/httpd/conf.d/ quando eu aponto meu navegador para vhost1.test.com ele carrega o index.html adequado como o vhost2.test.com. No entanto, o servidor web agora responde com o segundo vhost como o domínio curinga dos servidores, se eu fizer uma entrada dns para foo.test.com, a página para vhost2 será carregada. Se eu remover a configuração para vhost2, o mesmo comportamento acontece agora para vhost1. O que na minha configuração está causando o último servidor virtual carregado para se tornar um domínio curinga? Com essa configuração, o apache também está ignorando a raiz do documento padrão / var / www / html quando eu aponto meu navegador para test.com e, em vez disso, carrego o caractere curinga. Sem o vhost.conf carregado, os documentos em / var / www / html são carregados como esperado.

vhost1.conf

<VirtualHost *:80>
DocumentRoot /vhost1
ServerName vhost1.test.com
ErrorLog logs/vhost1-error_log
CustomLog logs/vhost1-access_log common
<Directory "/vhost1">
order deny,allow
Require all granted
Allow from localhost 127.0.0.1 192.168.
</Directory>

vhost2.conf

<VirtualHost *:80>
DocumentRoot /vhost2
ServerName vhost2.test.com
ErrorLog logs/vhost2-error_log
CustomLog logs/vhost2-access_log common
<Directory "/vhost2">
order deny,allow
Require all granted
Allow from localhost 127.0.0.1 192.168.
</Directory> 

    
por Joe Mama 10.03.2016 / 04:44

1 resposta

0

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

    
por 10.03.2016 / 04:58