Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Name-based virtual hosts

Il virtual hosting di Apache permette di servire più siti web con un'unica istanza di Apache: ecco cosa sono e come funzionano i name-based virtual host.
Il virtual hosting di Apache permette di servire più siti web con un'unica istanza di Apache: ecco cosa sono e come funzionano i name-based virtual host.
Link copiato negli appunti

Rispetto al virtual hosting basato su IP, illustrato nella lezione precedente, il virtual hosting name based presenta alcuni vantaggi. In primo luogo, distinguere i vari host in base al loro nome invece che all'indirizzo IP permette di avere un unico indirizzo IP condiviso invece di tanti IP univoci, uno per virtual host. Ciò consente di ridurre i costi e di semplificare l'architettura generale della nostra infrastruttura di hosting.

Per questi motivi, il virtual hosting name-based è la tecnica in generale più utilizzata e consigliata.

Sintassi

Come nel caso del virtual hosting IP based, la configurazione avviene grazie alla direttiva VirtualHost. In questo caso, però, la distinzione tra virtual host differenti viene implementata riferendosi al valore della direttiva ServerName. Essa deve contenere il nome di dominio FQDN associato al virtual host in oggetto.

Al posto dell'indirizzo IP, può essere inserito un asterisco. In questo caso Apache accetterà le richieste indipendentemente dall'indirizzo IP a cui sono destinate.

L'esempio sottostante mostra una configurazione con due virtual host, miovirtualhost.com e altrovirtualhost.com.

<VirtualHost *:80>
  ServerName www.miovirtualhost.com
  ServerAlias miovirtualhost.com
  DocumentRoot "/var/www/miovirtualhost.com"
  ErrorLog "logs/miovirtualhost-error_log"
  TransferLog "logs/miovirtualhost-access_log"
</VirtualHost>
<VirtualHost *:80>
  ServerName www.altrovirtualhost.com
  ServerAlias altrovirtualhost.com
  DocumentRoot "/var/www/altrovirtualhost.com"
  ErrorLog "logs/altrovirtualhost-error_log"
  TransferLog "logs/altrovirtualhost-access_log"
</VirtualHost>

Si noti l'uso della direttiva ServerAlias. Talvolta, è necessario rispondere con lo stesso virtual host anche se le richieste sono indirizzate a due domini diversi. L'esempio più ricorrente è quello del dominio di terzo livello www, che può essere o meno presente nelle richieste. Il problema potrebbe essere risolto creando due virtual host, uno con www ed uno senza. Ciò comporterebbe una duplicazione delle altre direttive di configurazione, con un incremento della probabilità che si commettano errori di configurazione.

La direttiva ServerAlias permette di risolvere il problema in modo conciso, indicando appunto un alias, un nome alternativo da utilizzare per il matching del virtual host in oggetto.

Virtual host di default

Utilizzare i nomi di dominio per distinguere i vari virtual host può portare a delle ambiguità, che vanno opportunamente gestite. Ad esempio, è possibile che nessuno dei virtual host gestiti dal server corrisponda ad un dominio richiesto. In questo caso, il server deve rispondere sempre e comunque in modo opportuno, ad esempio con una pagina che informi l'utente della presenza di una condizione di errore.

Le cause del verificarsi di una simile condizione possono essere accidentali (ad esempio, errori di configurazione DNS, richieste malformate, ecc.) oppure intenzionali (ad esempio, tentativi di intrusione o di fingerprinting).

La soluzione scelta dagli sviluppatori di Apache consiste nell'utilizzare un virtual host di default. In assenza di un match con i virtual host presenti nei file di configurazione, Apache risponderà con il virtual host di default.

Il virtual host di default è il primo virtual host presente nel file di configurazione, in ordine di lettura.

Questa caratteristica richiede particolare attenzione quando la configurazione di Apache è suddivisa su più file (come descritto nell'approfondimento dedicato alla configurazione modulare). In questo caso, infatti, l'ordine di inclusione dipende essenzialmente dall'ordinamento lessicografico dei nomi dei file di configurazione.

Si supponga ad esempio di avere i file di configurazione:

  • default.conf - contenente il virtual host configurato per restituire una pagina di errore;
  • miovirtualhost.conf

In questo caso, il file default.conf viene effettivamente utilizzato per il caso di default poiché è il primo ad essere incluso nella configurazione. Si supponga adesso di aggiungere un altro virtual host, altrovirtualhost.conf. I file di configurazione sono adesso tre:

  • default.conf
  • miovirtualhost.conf
  • altrovirtualhost.conf

Purtroppo, questa configurazione non funziona, poiché le richieste di default verranno gestite da altrovirtualhost.com invece che dal virtual host di default. Secondo l'ordinamento lessicografico, infatti, il file altrovirtualhost.conf è il primo ad essere processato poiché inizia con la lettera "a".

Per ovviare al problema è sufficiente aggiungere dei numeri in testa al nome del file, in modo tale da indicare esplicitamente l'ordinamento voluto. Ad esempio:

  • 000-default.conf
  • 10-miovirtualhost.conf
  • 20-altrovirtualhost.conf

Ciò garantisce che il file 000-default.conf venga sempre incluso per primo, indipendentemente dai nomi degli altri virtual host.

Ti consigliamo anche