diferença entre _default _: * e *: * no contexto do VirtualHost


35

Quero saber a diferença entre " default : *" e "*: *" no contexto do VirtualHost.

<VirtualHost _default_:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

<VirtualHost *:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

Não sei a diferença e a utilidade do uso.

Thk

Respostas:


40

A solução está na documentação do Apache 2.2 na diretiva Virtualhost :

Sintaxe: ... (...) Addr pode ser:

  • O endereço IP do host virtual;
  • Um nome de domínio totalmente qualificado para o endereço IP do host virtual (não recomendado);
  • O caractere * , usado apenas em combinação com NameVirtualHost * para corresponder a todos os endereços IP; ou
  • A sequência _default_ , usada apenas com hospedagem virtual IP para capturar endereços IP não correspondentes.

Existem duas maneiras de lidar com o Virtualhosts, virtualhosting baseado em nome e virtualhosting baseado em IP.

Com virtualhosts baseados em nomes, você tem uma lista de virtualhosts, cada um gerenciando um ou vários nomes de domínio e cada um associado a um casal listening IP:port. *é um valor especial que significa todos os IPs neste host . O virtualHost padrão é o primeiro declarado nesta lista para cada endereço de escuta fornecido.

Com o VirtualHosts baseado em IP, o ServerName diretiva do VirtualHost não é usada, as informações importantes são o IP de escuta (e a porta) e o VirtualHost padrão é o primeiro que corresponde ao IP que trata da solicitação recebida.

Portanto, com uma configuração de host virtual baseada em nome:

  • <Virtualhost *:80> with ServerName foo.com significa "em todos os IPs gerenciados neste host", "na porta 80", "se o cabeçalho do host de solicitação for foo.com", usarei este host virtual
  • <Virtualhost *:*> with Servername foo.com significa "em todos os IPs gerenciados neste host", "em todas as portas", "se o cabeçalho do host de solicitação for foo.com", usarei este host virtual
  • <Virtualhost 10.0.0.2:*> with Servername foo.com significa "para solicitação de entrada da minha interface de rede 10.0.0.2", "em todas as portas", "se o cabeçalho do host da solicitação for foo.com", usarei este host virtual
  • <Virtualhost _default_:*> with Servername foo.com : não deve ser usado com virtualhosting baseado em nome

E em um Virtualhosting baseado em IP:

  • <Virtualhost 10.0.0.2:*> significa "Vou usar esse host virtual para solicitar a minha interface 10.0.0.2"
  • <Virtualhost _default_:443> significa "Vou usar este host virtual para todas as outras interfaces de rede no meu host para solicitar entrada na porta 443"
  • <Virtualhost _default_:*> significa "Vou usar este host virtual para todas as outras interfaces de rede no meu host, se não corresponder a uma regra anterior e se o cabeçalho do host de solicitação não corresponder a um host virtual com base em nome"

Portanto, trata-se de definir um Virtualhost abrangente. A documentação acrescenta:

Ao usar a hospedagem virtual baseada em IP, _default_é possível especificar o nome especial; nesse caso, esse host virtual corresponderá a qualquer endereço IP que não esteja explicitamente listado em outro host virtual. Na ausência de qualquer _default_host virtual, a configuração do servidor "principal", que consiste em todas as definições fora de qualquer seção do VirtualHost, é usada quando não ocorre correspondência de IP. (Mas observe que qualquer endereço IP que corresponda a uma diretiva NameVirtualHost não utilizará a configuração "principal" do servidor nem o _default_host virtual. Consulte a documentação de hospedagem virtual baseada em nome para obter mais detalhes.)

Portanto, depois de tudo isso, fica bastante "claro" que misturar host virtual baseado em IP e em nome possa se tornar uma bagunça. Com o Apache 2.2, o host virtual baseado em nome era usado apenas se NameVirtualhost <something>fosse usado.

Mas com a nova versão do Apache 2.4, essas coisas são realmente mais fáceis de entender, sem NameVirtualhostdeclaração. A diretiva NameVirtualHost não tem mais nenhum efeito, exceto emitir um aviso. Qualquer combinação de endereço / porta que aparece em vários hosts virtuais é implicitamente tratada como um host virtual baseado em nome . Não há mais pensamentos complexos, mesmo a documentação agora é mais simples:

  • O caractere *, que atua como um curinga e corresponde a qualquer endereço IP.
  • A sequência _default_, que é um alias para *

Portanto, com o apache 2.4, a resposta é: é a mesma coisa .


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.