Configurar a página padrão para os Hosts Virtuais do Apache

4

Estamos executando o Apache em um servidor com várias entradas VirtualHost . Sempre que alguém acessa o servidor pelo seu endereço IP ( http://198.147.xx.xx ), um dos sites que é um VirtualHost aparece. Isso não é desejado. Preferimos que uma página em branco apareça se o IP for acessado diretamente. Eu não tenho certeza se o site escolhido é apenas o primeiro que vem na lista de entradas do Host Virtual ou o que.

Queremos configurar uma página em branco padrão se alguém acessar o servidor por IP. Eu pensei que simplesmente configurar outra entrada VirtualHost para o endereço IP faria isso, e parecia, mas agora o acesso a qualquer um dos outros VirtualHost sites leva à mesma página padrão em branco. Aqui está um exemplo da nossa configuração:

<VirtualHost *:80>
    DocumentRoot /vhosts/somesite.com/public
    ServerName somesite.com
    <Directory "/vhosts/somesite.com/public">
        allow from all
        Options +Indexes
        AllowOverride All
    </Directory>
    ServerAlias www.somesite.com
</VirtualHost>

<VirtualHost 198.147.XX.XX:80>
    DocumentRoot /vhosts/default/public
    <Directory /vhosts/default/public>
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

O que estamos fazendo de errado aqui? Existe uma maneira melhor de configurar uma página de destino padrão para qualquer pessoa que acessar o servidor por meio do endereço IP?

    
por Jake Wilson 03.04.2013 / 23:54

1 resposta

2

Se bem me lembro, o comportamento dos hosts virtuais funciona assim:

  • httpd procura o vhost com os qualificadores mais específicos. (seja o endereço IP ou o cabeçalho do host se NameVirtualHost foi declarado)
  • Na falta de uma entrada específica, o host virtual primeiro a ser definido é usado. Isso é chamado de host virtual padrão e o que normalmente é exibido quando uma solicitação é feita sem um cabeçalho Host . (por exemplo, pelo endereço IP)

O problema que você está enfrentando agora é que o seu host virtual baseado em IP é mais específico do que seu host virtual padrão e pega-tudo (pelo menos quando o cabeçalho Host não corresponde ao ServerName ou ServerAlias ). Para obter o comportamento que você está procurando, acho que você precisa fazer isso:

  • Crie um virtualhost padrão de *: 80 com uma página em branco.
  • Ajuste seu somesite.com virtualhost para que seu ServerAlias contenha todos os nomes que você não deseja que atinjam o host virtual padrão.

Espero que alguém tenha uma solução que chegue mais perto de alcançar o resultado final desejado; já faz algum tempo e eu estaria interessado em aprender com isso.

    
por 04.04.2013 / 02:17