Introduzione
Il server Apache è il web server più usato al mondo, che mette a disposizione potenti funzionalità, come moduli caricabili dinamicamente, supporto per i file multimediale, e un'ottima integrazione con altri software.
In questa guida vedremo come installare il server web Apache su un server con Ubuntu.
Prerequisiti
Per seguire questa guida dovreste avere il server configurato con un utente i privilegi sudo e un firewall di base per bloccare le porte non necessarie. È possibile fare tutto ciò seguendo la guida di configurazione iniziale per i server Ubuntu.
Step 1 - Installare Apache su Ubuntu
Apache è disponibile direttamente sulla repository software predefinita di Ubuntu, rendendo possibile l'installazione con la procedura classica.
Iniziamo subito aggiornando l'indice locale dei pacchetti per essere sicuri di avere tutto aggiornato all'ultima versione:
sudo apt update
Poi siamo pronti per installare il pacchetto apache2
con:
sudo apt install apache2
Una volta aver confermato l'installazione, Apache verrà installato da apt con tutte le sue dipendenze.
Step 2 - Configurare il Firewall per Apache
Prima di poter iniziare ad usare Apache, è necessario modificare le impostazioni del firewall per consentire l'accesso esterno alle porte predefinite per il traffico web. Se hai seguito la guida per la configurazione iniziale di un server Ubuntu, dovresti avere il firewall UFW configurato per limitare l'accesso al server.
Durante l'installazione, Apache avrà registrato presso UFW alcuni profili che possono essere utilizzati per abilitare o disabilitare l'accesso ad Apache attraverso il firewall.
Possiamo vedere l'elenco dei profili con:
sudo ufw app list
Nell'output saranno visualizzati tutti i profili registrati:
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Come vediamo dall'output sono presenti tre profili per Apache:
- Apache: questo profilo apre solo la porta 80 per il traffico web non crittografato.
- Apache Full: questo profilo apre sia la porta 80 per il traffico web non crittografato, sia la porta 443 per il traffico TLS/SSL crittografato.
- Apache Secure: questo profilo apre solo la porta 443 per il traffico TLS/SSL crittografato.
Si raccomanda di abilitare il profilo più stringente che consente comunque al traffico desiderato di passare. Dato che non abbiamo ancora configurato il certificato SSL per il nostro server, apriremo il traffico solamente sulla porta 80
:
sudo ufw allow 'Apache'
Possiamo verificare che i cambiamenti siano stati apportati con successo controllando lo stato del firewall:
sudo ufw status
Nell'output del comando possiamo vedere una lista con tutte le regole configurate sul firewall, tra cui dovrebbe figurare anche quella attivata per consentire al traffico HTTP di accedere al server Apache.
Step 3 - Controllare lo stato del web server
Dopo aver terminato il processo di installazione, Ubuntu 22.04 avvierà automaticamente Apache, e di conseguenza il web server sarà già pronto all'uso.
Tuttavia possiamo verificare che il servizio sia effettivamente in esecuzione utilizzando il comando systemd
:
sudo systemctl status apache2
Nell'output ci verrà confermato che il servizio di Apache è stato avviato con successo. Per essere certi che il web server funzioni come previsto, ora proveremo a richiedere una pagina web ad Apache.
Possiamo accedere la pagina predefinita di Apache per controllare che il software sia in esecuzione semplicemente inserendo l'indirizzo IPv4 del nostro server sulla barra degli URL di un browser. Se non siamo a conoscenza dell'indirizzo IP del nostro server, possiamo recuperarlo velocemente con il seguente comando:
hostname -I
Verranno stampati a schermo vari indirizzi separati da uno spazio. Provali tutti nel tuo browser per trovare quello effettivamente funzionante.
Una volta aver ottenuto l'indirizzo IPv4 possiamo procedere inserendolo nella barra degli indirizzi del nostro browser:
http://ipv4_del_tuo_server
Vedremo la pagina predefinita di Apache in esecuzione su Ubuntu 22.04, che dovrebbe essere come quella rappresentata nella seguente figura:

Questo ci fa sapere che Apache funziona correttamente, inoltre possiamo vedere alcune informazioni di base sui file e le cartelle più importanti di Apache.
Step 4 - Gestire il Processo di Apache
Ora che abbiamo un web server in esecuzione, e di cui abbiamo verificato il funzionamento, vediamo alcuni comandi di base che ci possono tornare utili per gestire il server con systemctl
.
Per stoppare il web server possiamo utilizzare:
sudo systemctl stop apache2
Per avviare il web server quando è stoppato possiamo utilizzare:
sudo systemctl start apache2
Per riavviare il web server, quindi prima stopparlo e poi riaccenderlo nuovamente, possiamo eseguire:
sudo systemctl restart apache2
Se abbiamo fatto semplicemente alcune modifiche alla configurazione, Apache, in molti casi, può ricaricare i file di config senza far cadere eventuali connessioni. Per farlo possiamo eseguire:
sudo systemctl reload apache2
Per impostazione predefinita, Apache è configurato per avviarsi automaticamente quando si avvia il server. Se vogliamo modificare questo comportamento possiamo eseguire:
sudo systemctl disable apache2
Mentre, nel caso volessimo riabilitare l'avvio automatico di Apache al boot del server, possiamo utilizzare:
sudo systemctl enable apache2
Step 5 - Configurare gli Host Virtuali (Consigliato)
Quando si lavora con Apache, abbiamo a disposizione gli host virtuali (virtual hosts, simili ai server blocks di Nginx) che ci consentono di incapsulare i parametri di configurazione e di hostare più di un dominio da un singolo server. Ora procederemo configurando un dominio chiamato esempio.it, ovviamente voi dovreste inserire al suo posto il vostro dominio effettivo.
Apache su Ubuntu 22.04 ha un host virtuale abilitato di default ed è configurato per servire i documento dal percorso /var/www/html. Questo setup funziona perfettamente per un singolo sito web, ma può diventare molto limitante se vogliamo hostare sul nostro server molteplici siti.
Invece di modificare la directory /var/www/html
, andiamo a creare una nuova cartella all'interno di /var/www
per il nostro nuovo dominio, lasciando /var/www/html
come directory predefinita da fornire nel caso la richiesta di un client non possa essere soddisfatta. Procediamo creando la cartella esempio.it
con il seguente comando:
sudo mkdir /var/www/esempio.it
Andiamo poi ad assegnare la proprietà della directory all'utente con cui abbiamo effettuato l'accesso e stiamo eseguendo i comando. L'utente è rappresentato dalla variabile d'ambiente $USER
:
sudo chown -R $USER:$USER /var/www/esempio.it
Per essere sicuri che i permessi siano corretti e consentano al proprietario della cartella di leggere, scrivere ed eseguire file, mentre limitino gli altri utenti solamente alla lettura e all'esecuzione di file, eseguiamo il seguente comando:
sudo chmod -R 755 /var/www/esempio.it
Ora andiamo a creare una semplice pagina index.html
di esempio con un editor di testo. In questo caso utilizzeremo nano
:
sudo nano /var/www/esempio.it/index.html
All'interno del file scriviamo il codice base per una semplice pagina HTML:
<html>
<head>
<title>Benvenuto su esempio.it!</title>
</head>
<body>
<h1>Congratulazioni! Il tuo hosting virtuale funziona correttamente!</h1>
</body>
</html>
Terminate le modifiche salviamo e il file e usciamo dall'editor. Se state utilizzando nano
, potete uscire premendo Ctrl + X
, poi Y
e infine Invio
.
Per consentire ad Apache di servire questo file, dobbiamo prima creare un file di configurazione per un nuovo host virtuale con i corretti parametri. Invece di modificare direttamente la configurazione predefinita che troviamo al percorso /etc/apache2/sites-available/000-default.conf
, creiamo un nuovo file per il nostro dominio al percorso /etc/apache2/sites-available/esempio.it.conf
eseguendo il seguente comando:
sudo nano /etc/apache2/sites-available/esempio.it.conf
All'interno del file andiamo ad aggiungere il seguente blocco di configurazione, che è simile a quello predefinito, ma con tutte le informazioni riguardanti il nostro nuovo dominio e cartella:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName esempio.it
ServerAlias www.esempio.it
DocumentRoot /var/www/esempio.it
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Si noti come, rispetto alla configurazione predefinita, DocumentRoot
sia stato puntato alla nostra nuova directory, e ServerAdmin
a un indirizzo email a cui l'amministratore del server ha accesso. Abbiamo anche aggiunto due parametri nuovi: ServerName
che indica il dominio di base che sarà puntato a questo host virtuale, e ServerAlias
, che indica eventuali domini secondari a cui l'host virtuale risponderà esattamente come se fossero il principale.
Dopo aver salvato i cambiamenti e chiuso il file possiamo abilitarlo con il tool a2ensite
, eseguendo il comando:
sudo a2ensite esempio.it.conf
Poi disabilitiamo il sito predefinito nel file 000-default.conf
:
sudo a2dissite 000-default.conf
Una volta terminati tutti i cambiamenti verifichiamo che la configurazione non contenga errori eseguendo il seguente comando:
sudo apache2ctl configtest
Se tutto è stato fatto correttamente dovremmo vedere il seguente output:
Syntax OK
Apache ora sarà responsabile di servire le richieste effettuate al tuo dominio. Possiamo verificare il corretto funzionamento del server visitando la pagina http://esempio.it, in cui dovrebbe essere visualizzata la pagina HTML creata in precedenza:

Step 6 - File e Directory Importanti di Apache
Ora che abbiamo un server web Apache e sappiamo come gestirlo, possiamo spendere le ultime parole della guida per approfondire alcuni file e directory importanti.
Contenuti
/var/www/html
: il contenuto web vero e proprio, che di default consiste solo in una pagina creata automaticamente da Apache contenuta nella cartellahtml
, questo percorso può essere modificato dai file di configurazione di Apache.
Configurazione del Server
/etc/apache2
: la directory contenente la configurazione di Apache. Tutti i file di configurazione di Apache si trovano in questa cartella./etc/apache2/apache2.conf
: il file di configurazione principale di Apache che può essere modificato per apportare cambiamenti alla configurazione globale di Apache. Questo file è responsabile del caricamento di molti altri file di configurazione contenuti nella medesima directory./etc/apache2/ports.conf
: il file che specifica le porte su cui Apache sarà in ascolto. Di default Apache è in ascolto sulla porta 80 e sulla porta 443 quando un certificato SSL è abilitato./etc/apache2/sites-available
: in questa directory sono contenuti i file degli host virtuali per i singoli siti web. Apache non utilizzerà i file trovati in questa cartella a meno che non sia presente un collegamento all'interno della directorysites-enabled
. Solitamente tutti gli host virtuali vengono configurati all'interno di esta cartella e poi abilitati con il comandoa2ensite
, che crea un collegamento nell'altra directory./etc/apache2/sites-enabled
: in questa directory sono salvati i file di configurazione degli host virtuali abilitati. Tipicamente questi file sono creati tramite un collegamento a un file di configurazione contenuto nella directorysites-available
e creato con il comando a2ensite./etc/apache2/conf-available
,/etc/apache2/conf-enabled
: queste cartelle hanno lo stesso legame disites-available
esites-enabled
, ma sono utilizzate per conservare frammenti di configurazione che non riguardano gli host virtuali. I file inconf-available
possono essere abilitati con il comandoa2enconfig
e disabilitati cona2disconfig
./etc/apache2/mods-available
,/etc/apache2/mods-enabled
: queste cartelle contengono rispettivamente i moduli disponibili e i moduli abilitati. I file terminanti in .load contengono frammenti per caricare moduli specifici, mentre i file che terminano in.conf
contengono la configurazione per quei moduli. I moduli possono essere abilitati e disabilitati con i comandia2enmod
ea2dismod
.
Log del Server
/var/log/apache2/access.log
: di default, ogni richiesta al tuo web server viene memorizzata in questo file di log, a meno che Apache non sia configurato diversamente./var/log/apache2/error.log
: di default, tutti gli errori sono registrati in questo file. Il parametro LogLevel contenuto nella configurazione di Apache consente di modificare il livello di dettaglio dei log di errore.
Conclusione
Con un web server installato hai l'imbarazzo della scelta tra le cose che puoi fare, tra i contenuti che puoi servire e le tecnologie che puoi usare per creare un'esperienza più ricca per gli utenti.
Se vuoi installare e configurare uno stack di applicazioni più completo, puoi leggere la guida su come installare lo stack LAMP su Ubuntu 22.04.