
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 ServerName
diretiva 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.com
significa "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.com
significa "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.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 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 NameVirtualhost
declaraçã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