Installare Apache su Ubuntu 22.04 e 20.04 LTS senza sorprese
Su Ubuntu 22.04 e 20.04 LTS Apache resta una scelta solida quando serve un web server maturo, ben documentato e facile da integrare con PHP, reverse proxy e certificati TLS. L’installazione base è semplice; il punto vero è fare subito le verifiche giuste, così da evitare di scoprire dopo che il servizio è attivo ma non raggiungibile, il firewall blocca il traffico o la configurazione predefinita non è quella che ti serve in produzione.
Questa guida parte da una macchina Ubuntu pulita e porta Apache a uno stato operativo verificabile, con attenzione a differenze minime tra le due versioni LTS. Dove cambia qualcosa, lo segnalo. L’obiettivo non è solo “installare il pacchetto”, ma arrivare a un setup che puoi controllare e ripetere senza affidarti alla memoria.
1. Aggiornare l’indice pacchetti e installare Apache
Prima di installare, aggiorna l’indice dei repository locali. È un passaggio banale, ma evita di lavorare con metadati vecchi o dipendenze non allineate. Su Ubuntu 22.04 e 20.04 il pacchetto principale è apache2.
Esegui questi comandi con un utente che abbia privilegi sudo:
sudo apt update
sudo apt install apache2
Se l’installazione va a buon fine, il servizio viene in genere abilitato all’avvio e avviato subito. Non darlo per scontato: verifica lo stato, perché in ambienti con policy restrittive o immagini personalizzate il comportamento può cambiare.
systemctl status apache2 --no-pager
Lo stato corretto deve mostrare active (running). Se vedi failed o inactive, il problema è già nel layer servizio e non nel DNS o nel browser.
2. Verificare che Apache risponda in locale
Prima di testare dall’esterno, controlla la risposta sul server. Questo isola il problema e ti evita di inseguire falsi positivi lato rete o firewall. Apache ascolta normalmente sulla porta 80 in IPv4 e IPv6.
curl -I http://localhost
Un esito sano mostra un codice come HTTP/1.1 200 OK o, in alcune configurazioni, un redirect verso un virtual host. Se ricevi Connection refused, il demone non sta ascoltando. Se ricevi timeout, c’è un problema più ampio o stai interrogando un indirizzo sbagliato.
Puoi anche controllare direttamente le porte in ascolto:
sudo ss -ltnp | grep ':80\|:443'
Il risultato atteso è una riga associata ad apache2 sulla porta 80; la 443 comparirà solo dopo aver configurato TLS.
3. Aprire il firewall in modo esplicito
Su Ubuntu molti server usano UFW, ma non è garantito. Se UFW è attivo, Apache può essere installato correttamente e restare comunque irraggiungibile dall’esterno. Per questo il passaggio firewall va sempre verificato.
Controlla lo stato e apri i profili necessari:
sudo ufw status verbose
sudo ufw allow 'Apache'
Il profilo Apache apre la porta 80. Se in seguito abiliti TLS, dovrai consentire anche il traffico HTTPS. In alcune installazioni compare il profilo Apache Full, che include 80 e 443.
Se UFW non è attivo, non forzarlo senza motivo. Prima verifica il path di rete: security group cloud, firewall di rete, ACL del provider o eventuali policy di host-based firewall diverse da UFW.
4. Capire cosa installa davvero il pacchetto
Su Ubuntu il pacchetto apache2 porta con sé una struttura di configurazione già ordinata. Non è tutto in un unico file, e questo è un vantaggio: puoi lavorare in modo modulare.
I percorsi più importanti sono questi:
/etc/apache2/apache2.conf
/etc/apache2/ports.conf
/etc/apache2/sites-available/
/etc/apache2/sites-enabled/
/etc/apache2/mods-available/
/etc/apache2/mods-enabled/
/var/www/html/
Il file /etc/apache2/apache2.conf contiene la configurazione globale, /etc/apache2/ports.conf definisce le porte in ascolto, mentre i virtual host stanno in sites-available e diventano attivi solo quando li abiliti con un link simbolico in sites-enabled. Questa separazione è utile perché ti permette di preparare configurazioni senza esporle subito.
5. Testare la pagina predefinita e il document root
Dopo l’installazione, Apache serve di default una pagina di test dal document root standard. È un controllo pratico, non un dettaglio estetico: se la pagina risponde, il server web, il filesystem e il path di base sono coerenti.
Apri dal browser l’indirizzo IP del server oppure usa curl da remoto:
curl -I http://IP_DEL_SERVER
Se la risposta arriva solo in locale ma non dall’esterno, il problema non è Apache: è quasi sempre rete, firewall o sicurezza del cloud. Se invece la risposta esterna è corretta ma il contenuto non è quello atteso, allora devi guardare il virtual host attivo e il document root associato.
La directory predefinita è in genere /var/www/html. Un file index.html lì dentro può sostituire la pagina di default. È utile in fase di test, ma in ambienti reali conviene mantenere una struttura per sito distinta, così eviti collisioni tra applicazioni diverse.
6. Creare il primo virtual host
Quando il server deve ospitare più domini o applicazioni, il virtual host è il punto da cui partire. È meglio non appoggiarsi alla configurazione di default oltre il tempo necessario per il test.
Supponiamo di voler servire example.test da una directory dedicata. Crea la struttura e un file di prova:
sudo mkdir -p /var/www/example.test/public_html
sudo chown -R www-data:www-data /var/www/example.test
sudo chmod -R 755 /var/www/example.test
printf '<h1>OK</h1>\n' | sudo tee /var/www/example.test/public_html/index.html
Ora crea il file del virtual host in /etc/apache2/sites-available/example.test.conf:
<VirtualHost *:80>
ServerName example.test
ServerAlias www.example.test
DocumentRoot /var/www/example.test/public_html
ErrorLog ${APACHE_LOG_DIR}/example.test_error.log
CustomLog ${APACHE_LOG_DIR}/example.test_access.log combined
</VirtualHost>
La scelta di log separati è pratica: quando qualcosa non torna, non devi scavare dentro il log globale insieme a tutto il resto del traffico.
Abilita il sito e ricarica Apache:
sudo a2ensite example.test.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
Il comando apache2ctl configtest deve restituire Syntax OK. Se fallisce, non ricaricare il servizio: correggi prima l’errore. Un reload con configurazione rotta ti lascia spesso con un servizio degradato o fermo.
7. Disabilitare il sito di default quando non serve più
Se il nuovo virtual host deve diventare l’unico front-end del server, conviene disabilitare il sito di default. Lasciarlo attivo insieme a un host personalizzato può creare ambiguità, soprattutto se il nome host non coincide o se manca una regola chiara di matching.
sudo a2dissite 000-default.conf
sudo systemctl reload apache2
Prima di farlo, verifica sempre che il virtual host nuovo sia realmente funzionante. In caso contrario, stai togliendo una rete di sicurezza. Se vuoi ridurre il rischio, mantieni il sito di default fino a test completi e poi rimuovilo in una finestra di manutenzione breve.
8. Abilitare i moduli utili senza caricare roba inutile
Apache è modulare e questa è una delle sue qualità migliori. Il punto è non attivare moduli a caso. Abilita solo ciò che ti serve davvero, perché ogni modulo aggiunge complessità e, in certi casi, superficie di attacco o consumo di risorse.
Per vedere i moduli attivi:
apache2ctl -M
Tra i moduli tipicamente utili in un setup base ci sono rewrite, headers e, se serve PHP via mod_php, il modulo relativo alla tua versione. Ma oggi spesso conviene usare PHP-FPM dietro Apache, soprattutto se vuoi un comportamento più pulito e meno accoppiato.
Per esempio, se ti serve il rewrite:
sudo a2enmod rewrite
sudo systemctl reload apache2
Dopo l’attivazione, controlla che il virtual host permetta davvero l’uso di .htaccess o delle direttive di rewrite nel blocco appropriato. Il modulo da solo non basta: senza AllowOverride o senza regole nel file di configurazione, il comportamento non cambia.
9. Leggere i log quando qualcosa non funziona
Quando Apache non risponde come previsto, i log sono il primo posto da guardare. Non partire dal browser, non partire dal DNS, non partire dal proxy: guarda prima il log del servizio e del virtual host interessato.
I file più utili sono in /var/log/apache2/. In particolare:
/var/log/apache2/error.log
/var/log/apache2/access.log
/var/log/apache2/example.test_error.log
/var/log/apache2/example.test_access.log
Per seguire gli errori in tempo reale:
sudo tail -f /var/log/apache2/error.log
Se vedi errori di sintassi, permessi negati o file mancanti, il problema è quasi sempre nella configurazione del virtual host o nel filesystem. Se invece il log è pulito ma il sito resta irraggiungibile, torna a firewall, routing e binding delle porte.
10. Differenze pratiche tra Ubuntu 20.04 e 22.04
Dal punto di vista dell’installazione di Apache, le due LTS sono molto simili. Cambiano soprattutto i pacchetti disponibili nei repository, alcune versioni di dipendenze e l’ecosistema attorno, non il metodo operativo di base.
In pratica, il flusso resta identico:
- aggiornare l’indice pacchetti;
- installare
apache2; - verificare il servizio con
systemctl; - testare la risposta HTTP locale;
- aprire il firewall se necessario;
- creare e abilitare i virtual host.
La parte davvero importante è non trattare la LTS come un dettaglio marginale: una macchina appena installata può avere policy di sicurezza, servizi concorrenti o configurazioni cloud diverse. La versione di Ubuntu conta meno del contesto in cui la macchina vive.
11. Preparare il passo successivo: TLS e PHP
Una volta che Apache risponde correttamente in HTTP, il passo naturale è aggiungere TLS e, se serve, il supporto applicativo. Per il TLS oggi la scelta più semplice resta Certbot con Let’s Encrypt, ma conviene arrivarci solo dopo aver stabilizzato il virtual host in chiaro. Fare debug di DNS, firewall e certificati insieme è un modo rapido per confondersi.
Se il sito ospita PHP, valuta PHP-FPM invece del vecchio approccio più monolitico. Apache funziona bene sia come web server diretto sia come front-end per applicazioni dinamiche, ma il collegamento con PHP va scelto in base al carico, alla separazione dei processi e alla facilità di manutenzione.
La regola operativa è semplice: prima porta Apache in uno stato pulito e osservabile, poi aggiungi i componenti intorno. È il modo più rapido per tenere sotto controllo errori, rollback e impatto sugli utenti.
Checklist finale operativa
Se vuoi un controllo veloce prima di considerare chiusa l’installazione, passa questi punti:
- Servizio attivo:
systemctl status apache2mostraactive (running). - Risposta locale:
curl -I http://localhostrestituisce un codice HTTP valido. - Porte in ascolto:
ss -ltnpmostra Apache su 80 e, se configurato, su 443. - Firewall: UFW o firewall cloud consentono il traffico necessario.
- Virtual host:
apache2ctl configtestrispondeSyntax OK. - Log:
/var/log/apache2/error.lognon mostra errori al reload o al primo accesso.
Se uno di questi punti fallisce, non andare avanti con l’aggiunta di moduli, TLS o applicazioni: correggi prima il livello base. È il modo più efficiente per installare Apache su Ubuntu 22.04 e 20.04 LTS senza trasformare una configurazione semplice in un problema di troubleshooting permanente.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.