Tutorial > Come creare Virtual Host con Apache su Ubuntu 20.04

Come creare Virtual Host con Apache su Ubuntu 20.04

Pubblicato il: 31 maggio 2021

Apache Web Hosting

Introduzione

Ogni sito web pubblicato su Internet viene ospitato su un web server (host), connesso in rete con un indirizzo IP pubblico e in grado di gestire le richieste delle pagine web da parte di un browser (client) come Chrome, Firefox o Internet Explorer.

Se hai la necessità di ospitare un sito web sulla tua macchina, allora dovrai innanzitutto installare un web server. Tra quelli a disposizione, uno dei più noti è Apache, software open source e compatibile sia con sistemi Unix che Windows. 

Cosa succede però se hai bisogno di ospitare più siti web sullo stesso server, pur avendo a disposizione un solo indirizzo IP pubblico? In questo caso avrai bisogno di configurare i Virtual Host su Apache per associare diversi domini allo stesso indirizzo IP.

In questo tutorial saranno illustrati tutti i passaggi necessari per installare Apache 2 sul tuo server Ubuntu 20.04 e configurarlo per creare due host virtuali per poter ospitare due diversi siti web su un singolo server.

Per iniziare dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.

Installazione di Apache

Puoi procedere a installare Apache 2 attraverso i repository ufficiali di Ubuntu, digitando:

sudo apt-get update
sudo apt install apache2

Poichè Apache comunica con l’esterno dovrai inserirlo tra le eccezioni del tuo Firewall. Qualora utilizzassi UFW, per consentire comunicazioni bidirezionali tra Apache e un Client digita:

sudo ufw allow 'Apache Full'

Apache dovrebbe essere già in esecuzione. Per verificarne lo stato puoi usare il comando:

sudo systemctl status apache2
Stato del processo Apache

Apri quindi il browser e collegati all’indirizzo IP del tuo Server:

  • http://il_tuo_indirizzo_IP (sostituisci con l'IP del tuo Cloud Server, se ti colleghi dall’esterno)
  • http://localhost (se hai accesso al server in locale).

Se l'installazione del web server è avvenuta correttamente dovresti vedere la pagina di benvenuto di Apache.

HomePage Apache

Qualora non fosse così, è possibile che si sia verificato qualche errore durante l’installazione di Apache. In tal caso ti consigliamo di disinstallare Apache e procedere con una nuova installazione.

Per rimuovere Apache ti basterà digitare:

sudo apt-get purge apache2

Configurazione Virtual Host su Apache

L'esempio di configurazione dei Virtual Host mostrato in questo tutorial è di tipo name-based, poiché si basa sul nome di dominio del sito web per distinguere le richieste. Esiste un'altra modalità IP-based, che viene utilizzata quando si ha necessità di associare più domini ognuno su un diverso indirizzo IP.

Nell'esempio presente in questo tutorial utilizzeremo come dominio mypersonaldomain.com ma tu dovrai utilizzare un dominio esistente del quale sei in possesso.

Accedendo all’indirizzo IP del Server dove hai appena installato Apache, normalmente puoi trovare il contenuto del tuo sito web all'interno di una cartella pubblica al percorso /var/www/html.

Nel caso in cui volessi ospitare più siti web, risulta quindi intuibile come basti creare tante cartelle quanti sono i siti web. Questo a patto però che per ciascun sito web venga impostato correttamente il file di configurazione dell’host virtuale che si occuperà di renderlo accessibile via web.

Spostati quindi all’interno di /var/www e crea la cartella per il tuo sito. Per comodità ti conviene attribuire a ciascuna cartella il nome del dominio corrispondente:

cd ~/var/www
sudo mkdir -p mypersonaldomain.com/html/

Definisci il tuo utente corrente come proprietario di quelle cartelle ed attribuisci i giusti permessi per lettura e modifica dei file:

sudo chown -R $USER:$USER /var/www/mypersonaldomain.com/html 
sudo chmod -R 755 /var/www/mypersonaldomain.com 

Crea un file index.html all’interno del tuo dominio così da poter avere un riscontro visivo quando tenterai la connessione al contenuto di quella cartella:

sudo nano mypersonaldomain.com/html/index.html

Copia all’interno dell’editor di testo il seguente codice HTML:

<html>
    <head>
        <title>Welcome</title>
    </head>
    <body>
        <h1>Hello, you’re connected to mypersonaldomain.com!</h1>
    </body>
</html>

Salva e chiudi utilizzando la combinazione CTRL + X , poi premi Y e conferma premendo ENTER.

Non resta quindi che generare il file di configurazione per il tuo host virtuale, digitando:

sudo nano /etc/apache2/sites-available/mypersonaldomain.com.conf 

Incolla nell’editor appena aperto il seguente contenuto, prestando attenzione a sostituire mypersonaldomain.com con il tuo dominio ogni volta. 

<VirtualHost *:80>
    ServerAdmin [email protected]      
    ServerName mypersonaldomain.com
    ServerAlias www.mypersonaldomain.com
    
    DocumentRoot /var/www/mypersonaldomain.com/html
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

In ogni configurazione, ServerAdmin indica l'email del sysadmin, ServerName è il nome per il Virtual Host, ServerAlias indica come viene tradotto dal server, mentre DocumentRoot identifica il percorso dove si trovano i suoi contenuti sul disco del server. Infine ErrorLog e CustomLog contengono il percorso dei file di log di sistema.

Salva e chiudi utilizzando la combinazione CTRL + X , poi premi Y e conferma premendo ENTER.

Configurazione VirtualHost

Abilita quindi il nuovo sito e disabilita la configurazione di default di Apache:

sudo a2ensite mypersonaldomain.com.conf
sudo a2dissite 000-default.conf

Per verificare che tutto rispetti la sintassi prevista da Apache, puoi utilizzare lo strumento integrato digitando:

sudo apache2ctl configtest 

Dovresti ottenere come risposta Syntax OK. Riavvia quindi Apache per rendere effettive le modifiche e far utilizzare al server web il tuo file di configurazione.

sudo systemctl restart apache2 

Se la configurazione del Virtual Host è avvenuta correttamente, allora vedrai il messaggio contenuto nella pagina HTML creata in precedenza nella cartella del dominio:

HomePage VirtualHost Apache

Creazione secondo Virtual Host Apache

La creazione del secondo Virtual Host con Apache è un'operazione molto semplice: basta infatti ripetere le operazioni effettuate precedentemente. Per questo secondo host virtuale utilizzeremo come dominio mypersonaldomain2.com.

Crea la cartella del secondo sito:

sudo mkdir -p /var/www/mypersonaldomain2.com/html 

Definisci il proprietario della cartella:

sudo chown -R $USER:$USER /var/www/mypersonaldomain2.com/html 

Imposta i permessi:

sudo chmod -R 755 /var/www/mypersonaldomain2.com 

Crea la pagina index.html:

nano /var/www/mypersonaldomain2.com/html/index.html  
<html>
    <head>
        <title>Welcome_2</title>
    </head>
    <body>
        <h1>Hello, you’re connected to mypersonaldomain2.com!</h1>
    </body>
</html>

Genera il file di configurazione anche per il secondo Virtual Host:

sudo nano /etc/apache2/sites-available/mypersonaldomain2.com.conf
<VirtualHost *:80>
ServerAdmin [email protected]
    ServerName mypersonaldomain2.com
    ServerAlias www.mypersonaldomain2.com
    DocumentRoot /var/www/mypersonaldomain2.com/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Abilita file di configurazione del secondo Virtual Host:

sudo a2ensite mypersonaldomain2.com.conf 

Verifica la correttezza della sintassi:

sudo apache2ctl configtest 

Riavvia Apache:

sudo systemctl restart apache2 

Se anche la configurazione del secondo host virtuale è avvenuta correttamente, allora vedrai allo stesso modo la pagina HTML che hai creato in precedenza:

HomePage VirtualHost Apache

Ti consigliamo infine di abilitare l’esecuzione automatica di Apache in modo che il web server sia attivo anche dopo un eventuale riavvio del Server.

Per effettuare questa modifica ti basterà digitare:

sudo systemctl enable apache2

Conclusioni

Se hai seguito correttamente tutti i passaggi, avrai installato il web server Apache su Ubuntu 20.04 e  creato i tuoi primi Virtual Host per associare i due siti web al singolo indirizzo IP della tua macchina.

I tuoi domini sono stati mappati sulla porta 80 del web server Apache, che viene associata di default ai browser quando si visita un sito web. Naturalmente puoi procedere alla creazione di più host virtuali in base a quanti siti hai necessità di ospitare.