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

27

Eu 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>

Eu não sei a diferença e o uso do uso.

Thk

    
por Luigi Giuseppe 15.01.2014 / 01:40

2 respostas

33

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

Syntax: ... (...) Addr can be:

  • The IP address of the virtual host;
  • A fully qualified domain name for the IP address of the virtual host (not recommended);
  • The character *, which is used only in combination with NameVirtualHost * to match all IP addresses; or
  • The string _default_, which is used only with IP virtual hosting to catch unmatched IP addresses.

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

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

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

Portanto, com uma configuração virtualhosting 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", utilizarei este virtualhost
  • <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", utilizarei este virtualhost
  • <Virtualhost 10.0.0.2:*> with Servername foo.com significa "para solicitação recebida da minha interface de rede 10.0.0.2", "em todas as portas", "se o cabeçalho do host de solicitação for foo.com" Usarei este virtualhost
  • <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 "Eu usarei este virtualhost para solicitação na minha interface 10.0.0.2"
  • <Virtualhost _default_:443> significa "Usarei este host virtual para toda a outra interface de rede no host para solicitação na porta 443"
  • <Virtualhost _default_:*> significa "Usarei este host virtual para toda a outra interface de rede em 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 nome com base virtualhost "

Então, tudo se resume a definir um Virtualhost catch-all. A documentação adiciona:

When using IP-based virtual hosting, the special name _default_ can be specified in which case this virtual host will match any IP address that is not explicitly listed in another virtual host. In the absence of any _default_ virtual host the "main" server config, consisting of all those definitions outside any VirtualHost section, is used when no IP-match occurs. (But note that any IP address that matches a NameVirtualHost directive will use neither the "main" server config nor the _default_ virtual host. See the name-based virtual hosting documentation for further details.)

Então, depois de tudo isso, torna-se bastante "claro" que misturar virtualhosting baseado em IP e nome pode se tornar uma bagunça. Com o Apache 2.2, o virtualhosting baseado em nome era usado somente se NameVirtualhost <something> fosse usado.

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

  • The character *, which acts as a wildcard and matches any IP address.
  • The string _default_, which is an alias for *

Então, com o apache 2.4, a resposta é é a mesma coisa .

    
por 15.01.2014 / 12:02
0

_default_ vhosts para todas as portas

Captura de todas as solicitações para qualquer endereço IP e porta não especificados, ou seja, uma combinação de endereço / porta que não é usada por nenhum outro host virtual.

link

    
por 15.01.2014 / 02:09