risposta-alla-domanda-sullo-sviluppo-web-bd.com

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

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

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

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

Non conosco la differenza e la porpora dell'uso.

Thk

38
Luigi Giuseppe

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 * a abbina tutti gli indirizzi IP; o
  • La stringa _default _ , che viene utilizzata solo con hosting virtuale IP per catturare indirizzi IP senza eguali.

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

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

Con VirtualHosts basato su IP non viene utilizzata la direttiva ServerName di VirtualHost, le informazioni importanti sono l'IP (e la porta) di ascolto e VirtualHost predefinito è il primo che corrisponde 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 dell'host della 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 dell'host della 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 richiesta è foo.com "Userò questo host virtuale
  • <Virtualhost _default_:*> with Servername foo.com: non deve essere utilizzato con il virtualhosting basato sul nome

E su un Virtualhosting basato su IP:

  • <Virtualhost 10.0.0.2:*> significa "Userò questo host virtuale per la richiesta che arriva sulla mia interfaccia 10.0.0.2"
  • <Virtualhost _default_:443> significa "Userò questo host virtuale per tutte le altre interfacce di rete sul mio host per la richiesta proveniente dalla porta 443"
  • <Virtualhost _default_:*> significa "Userò questo host virtuale 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, è possibile specificare il nome speciale _default_, Nel qual caso questo host virtuale corrisponderà a qualsiasi indirizzo IP non elencato esplicitamente in un altro host virtuale. In assenza di qualsiasi host virtuale _default_, La configurazione del server "principale", costituita da 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'host virtuale _default_. Vedere la documentazione di hosting virtuale basata sul nome per ulteriori dettagli.)

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 usato solo se NameVirtualhost <something> Veniva usato.

Ma con la nuova Apache 2.4 versione queste cose sono davvero più facili da capire, nessuna dichiarazione NameVirtualhost. 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.

44
regilero

_default_ vhosts per tutte le porte

Catturare ogni richiesta a qualsiasi indirizzo IP e porta non specificati, ovvero una combinazione indirizzo/porta che non viene utilizzata per nessun altro host virtuale.

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

0
Jacek Lakomiec