Ricerca nel sito web

Come Configurare gli Host Virtuali Apache su un Server Ubuntu


Introduzione

Il server HTTP Apache è un popolare server web open-source che offre flessibilità, potenza e un ampio supporto per gli sviluppatori. La configurazione del server Apache non avviene in un unico file monolitico, ma attraverso un design modulare in cui nuovi file possono essere aggiunti e modificati secondo necessità. All'interno di questo design modulare, è possibile creare un sito o dominio individuale chiamato virtual host.

Usando gli host virtuali, un'istanza di Apache può servire più siti web. Ogni dominio o sito singolo configurato tramite Apache indirizzerà il visitatore a una directory specifica contenente le informazioni di quel sito. Questo avviene senza indicare al visitatore che lo stesso server è anche responsabile di altri siti. Questo schema è scalabile senza alcun limite software, purché il tuo server possa gestire il carico.

In questa guida, configurerai gli host virtuali di Apache su un server Ubuntu. Durante questo processo, imparerai come fornire contenuti diversi a visitatori diversi a seconda dei domini che richiedono, creando due siti con host virtuali.

Convalidato sulle versioni recenti di Ubuntu: I passaggi e i comandi in questo tutorial sono stati verificati su Ubuntu 20.04 LTS, 22.04 LTS e 24.04 LTS. La struttura di configurazione di Apache (sites-available, sites-enabled, a2ensite, a2dissite) e la struttura delle directory utilizzate qui sono le stesse in tutte queste versioni.

Punti salienti

  • Host virtuali consentono a un'istanza di Apache di gestire più siti; ogni dominio punta alla propria radice dei documenti.
  • Crei una directory sotto /var/www per ogni sito (ad esempio, /var/www/tuo_dominio/public_html) e imposti proprietà e permessi in modo che il server web possa leggere i file e il tuo utente possa modificarli.
  • Ogni sito ottiene il proprio file di configurazione in /etc/apache2/sites-available/ con ServerName, ServerAlias e DocumentRoot.
  • Usa a2ensite e a2dissite per abilitare o disabilitare i siti, quindi ricarica o riavvia Apache affinché le modifiche abbiano effetto.
  • Puoi testare senza DNS reale modificando il tuo file locale hosts per puntare i tuoi domini di esempio all'IP del server.

Prerequisiti

Prima di iniziare questo tutorial, avrai bisogno di:

  • Un server Ubuntu con un utente non root con privilegi sudo. Puoi usare la nostra guida Configurazione iniziale del server con Ubuntu per configurarlo.
  • Apache installato sul server. Puoi imparare come farlo completando i passaggi 1-3 del nostro tutorial su Come Installare il Server Web Apache su Ubuntu.

Se stai usando Linux-Console.net, puoi imparare come configurare i domini seguendo la nostra documentazione del prodotto, Come aggiungere e configurare i domini.

Per completare con successo questo tutorial, avrai bisogno di due domini con:

  • Un record A con your_domain che punta all'indirizzo IP pubblico del tuo server.
  • Un record A con www.tuo_dominio che punta all'indirizzo IP pubblico del tuo server.

Per altri fornitori, si prega di fare riferimento alla relativa documentazione del prodotto.

Nota: Se al momento non hai domini disponibili, puoi utilizzare valori di prova localmente sul tuo computer. Il Passo 6 di questo tutorial ti mostrerà come testare e configurare i tuoi valori di prova. Questo ti permetterà di convalidare la tua configurazione anche se i tuoi contenuti non saranno disponibili per altri visitatori tramite il nome di dominio.

Fase 1 — Creazione della struttura delle directory

Il primo passo è creare una struttura di directory che conterrà i dati del sito che fornirai ai visitatori.

La tua document root, la directory di livello superiore che Apache controlla per trovare i contenuti da servire, sarà impostata su directory individuali sotto la directory /var/www. Qui creerai una directory per ciascuno dei virtual host.

All'interno di ciascuna di queste directory, creerai una directory public_html. La directory public_html contiene i contenuti che saranno serviti ai tuoi visitatori. Le directory principali, qui denominate your_domain_1 e your_domain_2, conterranno gli script e il codice dell'applicazione per supportare i contenuti web.

Usa questi comandi, con i tuoi nomi di dominio, per creare le tue directory:

sudo mkdir -p /var/www/your_domain_1/public_html

sudo mkdir -p /var/www/your_domain_2/public_html

Assicurati di sostituire your_domain_1 e your_domain_2 con i tuoi rispettivi domini. Ad esempio, se uno dei tuoi domini fosse example.com, dovresti creare questa struttura di directory: /var/www/example.com/public_html.

Fase 2 — Concessione dei permessi

Hai creato la struttura delle directory per i tuoi file, ma sono di proprietà dell'utente root. Se vuoi che il tuo utente normale possa modificare i file in queste directory web, puoi cambiare la proprietà con questi comandi:

sudo chown -R $USER:$USER /var/www/your_domain_1/public_html

sudo chown -R $USER:$USER /var/www/your_domain_2/public_html

La variabile $USER assumerà il valore dell'utente con cui sei attualmente connesso quando premi ENTER. Facendo ciò, l'utente normale ora possiede le sottodirectory public_html dove memorizzerai i tuoi contenuti.

Dovresti anche modificare i tuoi permessi per assicurarti che l'accesso in lettura sia consentito alla directory web generale e a tutti i file e le cartelle in essa contenuti, in modo che le pagine possano essere servite correttamente:

sudo chmod -R 755 /var/www

Il tuo server web dispone ora delle autorizzazioni necessarie per fornire contenuti e il tuo utente dovrebbe essere in grado di creare contenuti all'interno delle cartelle necessarie. Il passo successivo è creare contenuti per i siti del tuo host virtuale.

Fase 3 — Creazione delle pagine predefinite per ogni host virtuale

Con la struttura delle directory in posizione, puoi iniziare a concentrarti su ciascun singolo sito virtuale e sui contenuti all'interno di quel sito. Inizia creando una pagina index.html per il tuo primo sito your_domain_1.

Apri e crea il file index.html con il tuo editor di testo preferito. In questo esempio si utilizza nano:

nano /var/www/your_domain_1/public_html/index.html

All'interno di questo file, crea un file HTML che indichi ai visitatori a quale sito sono collegati:

<html>
  <head>
    <title>Welcome to your_domain_1!</title>
  </head>
  <body>
    <h1>Success! The your_domain_1 virtual host is working!</h1>
  </body>
</html>

Per salvare e chiudere il file in nano, inizia premendo CTRL+X. Premi Y quando ti viene chiesto di salvare il file, poi premi INVIO quando hai finito per uscire.

Successivamente, copia questo file da usare come base per il tuo secondo sito digitando:

cp /var/www/your_domain_1/public_html/index.html /var/www/your_domain_2/public_html/index.html

Poi apri questo nuovo file e modifica le informazioni rilevanti usando il tuo editor di testo come prima:

nano /var/www/your_domain_2/public_html/index.html
<html>
  <head>
    <title>Welcome to your_domain_2!</title>
  </head>
  <body> <h1>Success! The your_domain_2 virtual host is working!</h1>
  </body>
</html>

Salva e chiudi questo file. Ora hai una pagina per ogni sito che puoi usare per testare la configurazione dell'host virtuale.

Passo 4 — Creazione di nuovi file Virtual Host

I file di host virtuali specificano la configurazione effettiva dei tuoi host virtuali e controllano come il server web Apache risponde alle diverse richieste di dominio. Per saperne di più sulla struttura di Apache e sulle opzioni globali, consulta Come configurare il server web Apache su un VPS Ubuntu o Debian.

Apache viene fornito con un file di host virtuale predefinito chiamato 000-default.conf. Puoi copiare questo file per creare file di host virtuali per ciascuno dei tuoi domini.

Copia il file di configurazione predefinito sul primo dominio:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/your_domain_1.conf

Sii consapevole che la configurazione predefinita di Ubuntu richiede che ogni file di virtual host termini con .conf.

Apri il nuovo file nel tuo editor di testo preferito con privilegi root:

sudo nano /etc/apache2/sites-available/your_domain_1.conf

Con i commenti rimossi, il file sarà simile a questo:

<VirtualHost *:80>
  ...
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
   ...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

All'interno di questo file, personalizza gli elementi per il tuo primo dominio e aggiungi alcune direttive aggiuntive. Questa sezione di host virtuale corrisponde a qualsiasi richiesta effettuata sulla porta 80, la porta HTTP predefinita.

Per prima cosa, cambia la direttiva ServerAdmin con un'email tramite la quale l'amministratore del sito può ricevere messaggi:

ServerAdmin admin@your_domain_1

Dopo questo, aggiungi due direttive aggiuntive. La prima, chiamata ServerName, stabilisce il dominio base per la definizione dell'host virtuale. La seconda, chiamata ServerAlias, definisce ulteriori nomi che dovrebbero corrispondere come se fossero il nome base. Questo è utile per abbinare host aggiuntivi che hai definito. Ad esempio, se imposti la direttiva ServerName su example.com, potresti definire un ServerAlias su www.example.com, e entrambi punteranno all'indirizzo IP di questo server.

Aggiungi queste due direttive al tuo file di configurazione dopo la riga ServerAdmin:

<VirtualHost *:80>
  ...
    ServerAdmin admin@your_domain_1
    ServerName your_domain_1
    ServerAlias www.your_domain_1
    DocumentRoot /var/www/html
    ...
</VirtualHost>

Successivamente, modifica la posizione del file del virtual host per la root dei documenti di questo dominio. Modifica la direttiva DocumentRoot per puntare alla directory che hai creato per questo host:

DocumentRoot /var/www/your_domain_1/public_html

Ecco un esempio del file del virtual host con tutte le modifiche apportate sopra:

<VirtualHost *:80>
  ...
    ServerAdmin admin@your_domain_1
    ServerName your_domain_1
    ServerAlias www.your_domain_1
    DocumentRoot /var/www/your_domain_1/public_html
    ...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ...
</VirtualHost>

Salva e chiudi il file.

Crea il tuo secondo file di configurazione copiando il file dal tuo primo sito virtual host:

sudo cp /etc/apache2/sites-available/your_domain_1.conf /etc/apache2/sites-available/your_domain_2.conf

Apri il nuovo file nel tuo editor preferito:

sudo nano /etc/apache2/sites-available/your_domain_2.conf

Ora devi modificare tutte le informazioni per fare riferimento al tuo secondo dominio. Quando avrai finito, dovrebbe apparire così:

<VirtualHost *:80>
  ...
    ServerAdmin admin@your_domain_2
    ServerName your_domain_2
    ServerAlias www.your_domain_2
    DocumentRoot /var/www/your_domain_2/public_html
    ...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ...
</VirtualHost>

Salva e chiudi il file quando hai finito.

Passo 5 — Abilitare i nuovi file del Virtual Host

Ora che hai creato i tuoi file di host virtuali, devi abilitarli. Apache include alcuni strumenti che ti permettono di farlo.

Utilizzerai lo strumento a2ensite per abilitare ciascuno dei tuoi siti. Se desideri leggere di più su questo script, puoi consultare la pagina man di a2ensite.

Usa i seguenti comandi per abilitare i tuoi siti di host virtuale:

sudo a2ensite your_domain_1.conf

sudo a2ensite your_domain_2.conf

Ci sarà un output per entrambi i siti, simile all'esempio riportato di seguito, che ti ricorda di ricaricare il tuo server Apache:

Enabling site example.com.
To activate the new configuration, you need to run:
  systemctl reload apache2

Prima di ricaricare il server, disattiva il sito predefinito definito in 000-default.conf utilizzando il comando a2dissite:

sudo a2dissite 000-default.conf
Site 000-default disabled.
To activate the new configuration, you need to run:
  systemctl reload apache2

Successivamente, verifica la presenza di errori di configurazione:

sudo apache2ctl configtest

Dovresti ricevere il seguente output:

. . .
Syntax OK

Quando hai finito, riavvia Apache per rendere effettive queste modifiche.

sudo systemctl restart apache2

Facoltativamente, puoi controllare lo stato del server dopo tutte queste modifiche con questo comando:

sudo systemctl status apache2

Il tuo server dovrebbe ora essere configurato per ospitare due siti web. Se stai utilizzando nomi di dominio reali, puoi saltare il Passaggio 6 e passare al Passaggio 7. Se stai testando la configurazione localmente, segui il Passaggio 6 per imparare come testare la tua configurazione usando il tuo computer locale.

Passo 6 — (Opzionale) Configurazione del file hosts locale

Se non avete utilizzato nomi di dominio reali di vostra proprietà per testare questa procedura e avete invece usato domini di esempio, potete comunque testare la funzionalità dei vostri siti con host virtuali modificando temporaneamente il file hosts sul vostro computer locale. Questo intercetterà tutte le richieste per i domini che avete configurato e le indirizzerà al vostro Virtual Private Server (VPS), proprio come farebbe il sistema DNS se steste utilizzando domini registrati. Questo funzionerà solo dal vostro computer locale ed è solo a scopo di test.

Assicurati di eseguire questi passaggi sul tuo computer locale e non sul server VPS. Avrai bisogno di conoscere la password amministrativa del computer o di far parte del gruppo amministrativo.

Se utilizzi un computer Mac o Linux, modifica il tuo file locale con privilegi di amministratore digitando:

sudo nano /etc/hosts

Se sei su un computer Windows, apri il Prompt dei comandi e digita:

notepad %windir%\system32\drivers\etc\hosts

I dettagli che devi aggiungere sono l'indirizzo IP pubblico del tuo server, seguito dal dominio che desideri utilizzare per raggiungere quel server. Utilizzando i domini indicati in questa guida e sostituendo l'IP del tuo server al testo your_server_IP, il tuo file dovrebbe apparire così:

127.0.0.1   localhost
127.0.1.1   guest-desktop
your_server_IP your_domain_1
your_server_IP your_domain_2

Questo indirizzerà tutte le richieste per i tuoi due domini sul tuo computer e le invierà al tuo server all'indirizzo IP designato.

Salva e chiudi il file.

Fase 7 — Testare i Risultati

Ora che hai configurato i tuoi host virtuali, puoi testare la tua configurazione visitando i domini che hai configurato nel tuo browser web:

http://your_domain_1

Puoi anche visitare la pagina del tuo secondo host e visualizzare il file che hai creato per il tuo secondo sito:

http://your_domain_2

Se entrambi questi siti funzionano come previsto, hai configurato correttamente due host virtuali sullo stesso server.

Nota: Se hai modificato il file hosts del tuo computer locale, come nel Passo 6 di questo tutorial, potresti voler eliminare le righe che hai aggiunto ora che hai verificato che la tua configurazione funziona. Questo impedirà che il tuo file hosts si riempia di voci non più necessarie.

Domande Frequenti

1. Cosa sono gli Apache Virtual Hosts?

Gli host virtuali di Apache sono un modo per eseguire più siti web su un singolo server Apache. Ogni host virtuale ha il proprio dominio (o sottodominio), root dei documenti e impostazioni. I visitatori vedono solo il sito relativo al dominio che richiedono; non vedono che altri siti si trovano sullo stesso server.

2. Quanti host virtuali può gestire Apache?

Apache non limita il numero di host virtuali. Puoi aggiungere quanti ne permettano le risorse del tuo server. Ogni nuovo sito necessita del proprio file di configurazione in /etc/apache2/sites-available/, di una propria directory sotto /var/www e poi va abilitato con a2ensite e riavviato Apache.

3. Qual è la differenza tra ServerName e ServerAlias?

Le direttive ServerName e ServerAlias specificano a quali nomi host Apache deve rispondere per ciascun host virtuale, ma hanno scopi leggermente diversi:

DirettivaDescrizioneEsempio
ServerName
Il nome host principale e canonico per l'host virtuale. Apache corrisponde esattamente a questo nome.
example.com
ServerAlias
Nomi host alternativi che puntano anch'essi a questo host virtuale, inclusi i caratteri jolly.
www.example.com, *.example.com

Come funziona?

  • Usa ServerName per il dominio principale.
  • Usa ServerAlias per altri nomi host (come le versioni www. o i sottodomini) che dovrebbero mostrare lo stesso contenuto del sito.

Qualsiasi richiesta che corrisponde al ServerName o a uno qualsiasi dei ServerAlias viene servita da quel host virtuale. Per ulteriori informazioni, consulta la documentazione ufficiale di Apache sugli host virtuali.

4. Ho bisogno di un nome di dominio per gli host virtuali?

Non è necessario avere un dominio registrato per seguire questa guida. Puoi usare nomi host di esempio e indirizzarli al tuo server modificando il file hosts sul tuo computer (vedi Passo 6). Per un sito a cui altri accederanno tramite Internet, è necessario un dominio reale e record DNS che lo puntino al tuo server. Se utilizzi Linux-Console.net, puoi aggiungere e gestire domini nel pannello di controllo; consulta il nostro avvio rapido DNS per sapere come aggiungere un dominio.

5. Dove sono archiviati i file dei virtual host di Apache?

Su Ubuntu e Debian, le configurazioni dei virtual host si trovano in /etc/apache2/sites-available/. Ogni sito ha un file .conf lì (ad esempio, example.com.conf). Abilitare un sito con a2ensite aggiunge un link simbolico in /etc/apache2/sites-enabled/ che punta a quel file. Il sito predefinito che risponde quando nessun altro host corrisponde è 000-default.conf.

Conclusione

Ora hai un singolo server che gestisce due nomi di dominio separati. Puoi ampliare questo processo seguendo i passaggi che abbiamo illustrato sopra per aggiungere ulteriori host virtuali. Non ci sono limiti software sul numero di nomi di dominio che Apache può gestire, quindi sentiti libero di creare tutti gli host virtuali che il tuo server è in grado di gestire.

Prossimi passi e risorse correlate

  • Rafforzare Apache e aggiungere HTTPS: Dopo che i virtual host funzionano, puoi aggiungere TLS seguendo Come proteggere Apache con Let's Encrypt su Ubuntu e ottimizzare il server usando Come configurare il server web Apache su un VPS Ubuntu o Debian.
  • Stack LAMP completo: Per aggiungere MySQL e PHP sullo stesso server Ubuntu, segui Come installare lo Stack LAMP su Ubuntu.
  • Prodotti Linux-Console.net: Usa Droplets per eseguire Ubuntu e Apache, e DNS per gestire i record dei domini e indirizzare i tuoi domini al tuo server. Documentazione dei prodotti: Aggiungi un dominio (guida rapida DNS).

Grazie per aver imparato con la community di Linux-Console.net.