diferença entre _default_:* e *:* no contexto VirtualHost

diferença entre _default_:* e *:* no contexto VirtualHost

Eu quero saber a diferença entre"padrão:*" e "*:*"no contexto VirtualHost.

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

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

Não sei a diferença e o propósito de uso.

Obrigado

Responder1

A solução está na documentação do Apache 2.2na 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 personagem *, que é usado apenas em combinação comNomeVirtualHost* para corresponder a todos os endereços IP; ou
  • A string _default_, que é usado apenas comAlojamento virtual IPpara capturar endereços IP incomparáveis.

Existem duas maneiras de lidar com 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 alguns arquivos listening IP:port. *é um valor especial que significatodos os IPs neste host. O virtualHost padrão é o primeiro declarado nesta lista para cada endereço de escuta fornecido.

Com VirtualHosts baseados em IP, a ServerNamediretiva do VirtualHost não é usada, a informação importante é o IP de escuta (e a porta), e o VirtualHost padrão é o primeiro que corresponde ao IP que trata a solicitação recebida.

Assim, com uma configuração de hospedagem virtual baseada em nome:

  • <Virtualhost *:80> with ServerName foo.comsignifica "em todos os IPs gerenciados neste host", "na porta 80", "se o cabeçalho do host da solicitação for foo.com" usarei este virtualhost
  • <Virtualhost *:*> with Servername foo.comsignifica "em todos os IPs gerenciados neste host", "em todas as portas", "se o cabeçalho do host da solicitação for foo.com" usarei este virtualhost
  • <Virtualhost 10.0.0.2:*> with Servername foo.comsignifica "para solicitação recebida 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 virtualhost
  • <Virtualhost _default_:*> with Servername foo.com: não deve ser usado com hospedagem virtual baseada em nome

E em um Virtualhosting baseado em IP:

  • <Virtualhost 10.0.0.2:*>significa "Usarei este virtualhost para solicitações na minha interface 10.0.0.2"
  • <Virtualhost _default_:443>significa "Usarei este host virtual para todas as outras interfaces de rede no meu host para solicitações provenientes da porta 443"
  • <Virtualhost _default_:*>significa "Usarei este host virtual para todas as outras interfaces de rede em meu host, se ele não corresponder a uma regra anterior e se o cabeçalho do host da solicitação não corresponder a um host virtual baseado em nome"

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

Ao usar hospedagem virtual baseada em IP, o nome especial _default_pode ser especificado, caso em que esse host virtual corresponderá a qualquer endereço IP que não esteja listado explicitamente 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 VirtualHost, é usada quando não ocorre nenhuma correspondência de IP. (Mas observe que qualquer endereço IP que corresponda a uma diretiva NameVirtualHost não usará nem a configuração do servidor "principal" nem o _default_host virtual. Consulte a documentação de hospedagem virtual baseada em nome para obter mais detalhes.)

Então, depois de todas essas coisas, fica bastante "claro" que misturar hospedagem virtual baseada em IP e baseada em nome pode se tornar uma bagunça. Com o Apache 2.2, a hospedagem virtual baseada em nome era usada apenas se NameVirtualhost <something>fosse usada.

Mascom o novoApache 2.4versãoessas coisas são realmente mais fáceis de entender, sem NameVirtualhostdeclaração.A diretiva NameVirtualHost não tem mais nenhum efeito, a não ser emitir um aviso. Qualquer combinação de endereço/porta que apareça em vários hosts virtuais é tratada implicitamente como um host virtual baseado em nome. Chega de pensamentos complexos, até a documentação agora é mais simples:

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

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

Responder2

_default_vhosts para todas as portas

Capturar 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 seja usada para nenhum outro host virtual.

http://httpd.apache.org/docs/2.2/vhosts/examples.html#default

informação relacionada