differenza tra _default _: * e *: * nel contesto VirtualHost


35

Voglio sapere la differenza tra " default : *" e "*: *" nel contesto VirtualHost.

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

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

Non conosco la differenza e la porpora dell'uso.

Thk

Risposte:


40

La soluzione è sulla documentazione di Apache 2.2 sulla direttiva Virtualhost :

Sintassi: ... (...) Addr può essere:

  • L'indirizzo IP dell'host virtuale;
  • Un nome di dominio completo per l'indirizzo IP dell'host virtuale (non consigliato);
  • Il carattere * , che viene utilizzato solo in combinazione con NameVirtualHost * per abbinare tutti gli indirizzi IP; o
  • La stringa _default_ , che viene utilizzata solo con l'hosting virtuale IP per rilevare indirizzi IP senza eguali.

Esistono due modi di gestire VirtualHosts, Virtualhosting basato su nomi e Virtualhosting basato su IP.

Con host virtuali basati su nome hai un elenco di host virtuali, ognuno dei quali gestisce uno o più nomi di dominio e ognuno è associato a una coppia listening IP:port. *è un valore speciale che indica tutti gli IP su questo host . VirtualHost predefinito è il primo dichiarato in questo elenco per ciascun indirizzo di ascolto.

Con VirtualHosts basato su IP ServerNamenon viene utilizzata la direttiva di VirtualHost, le informazioni importanti sono l'IP (e la porta) di ascolto e VirtualHost predefinito è il primo corrispondente all'IP che gestisce la richiesta in arrivo.

Quindi con una configurazione di virtualhosting basata sul nome:

  • <Virtualhost *:80> with ServerName foo.com significa "su tutti gli IP gestiti su questo host", "sulla porta 80", "se l'intestazione host richiesta è foo.com" Userò questo virtualhost
  • <Virtualhost *:*> with Servername foo.com significa "su tutti gli IP gestiti su questo host", "su tutte le porte", "se l'intestazione host richiesta è foo.com" Userò questo virtualhost
  • <Virtualhost 10.0.0.2:*> with Servername foo.com significa "per la richiesta in arrivo dalla mia interfaccia di rete 10.0.0.2", "su tutte le porte", "se l'intestazione host della richiesta è foo.com" Userò questo virtualhost
  • <Virtualhost _default_:*> with Servername foo.com : non deve essere utilizzato con virtualhosting basato sul nome

E su un Virtualhosting basato su IP:

  • <Virtualhost 10.0.0.2:*> significa "Userò questo virtualhost per la richiesta che arriva sulla mia interfaccia 10.0.0.2"
  • <Virtualhost _default_:443> significa "Userò questo virtualhost per tutte le altre interfacce di rete sul mio host per richieste provenienti dalla porta 443"
  • <Virtualhost _default_:*> significa "Userò questo virtualhost per tutte le altre interfacce di rete sul mio host, se non corrisponde a una regola precedente e se l'intestazione host della richiesta non corrisponde a un virtualhost con nome"

Quindi si tratta di definire un Virtualhost tutto sommato. La documentazione aggiunge:

Quando si utilizza l'hosting virtuale basato su IP, è _default_possibile specificare il nome speciale nel qual caso questo host virtuale corrisponderà a qualsiasi indirizzo IP non elencato esplicitamente in un altro host virtuale. In assenza di _default_host virtuale, la configurazione del server "principale", che comprende tutte quelle definizioni al di fuori di qualsiasi sezione VirtualHost, viene utilizzata quando non si verifica alcuna corrispondenza IP. (Si noti che qualsiasi indirizzo IP che corrisponde a una direttiva NameVirtualHost non utilizzerà né la configurazione del server "principale" né l' _default_host virtuale. Per ulteriori dettagli, consultare la documentazione di hosting virtuale basata sul nome.)

Quindi, dopo tutte queste cose, diventa abbastanza "chiaro" che mescolare l'hosting virtuale basato su IP e basato sul nome potrebbe diventare un casino. Con Apache 2.2 l'hosting virtuale basato sul nome veniva utilizzato solo se NameVirtualhost <something>veniva utilizzato.

Ma con la nuova versione di Apache 2.4 queste cose sono davvero più facili da capire, nessuna NameVirtualhostdichiarazione. La direttiva NameVirtualHost non ha più alcun effetto se non quello di emettere un avviso. Qualsiasi combinazione indirizzo / porta che appare in più host virtuali viene implicitamente trattata come un host virtuale basato sul nome . Niente più complessi, anche la documentazione è ora più semplice:

  • Il carattere *, che funge da jolly e corrisponde a qualsiasi indirizzo IP.
  • La stringa _default_, che è un alias per *

Quindi con Apache 2.4 la risposta è, è la stessa cosa .


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.