Come Installare Apache Web Server su Ubuntu 22.04

Contenuto1 Introduzione2 Prerequisiti3 Step 1 – Installare Apache su Ubuntu4 Step 2 – Configurare il Firewall per Apache5 Step 3 – Controllare lo stato del web server6 Step 4 – […]

Avatar di gbfactory
gbfactory 16 Febbraio 2022

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 cartella html, 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 directory sites-enabled. Solitamente tutti gli host virtuali vengono configurati all'interno di esta cartella e poi abilitati con il comando a2ensite, 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 directory sites-available e creato con il comando a2ensite.
  • /etc/apache2/conf-available, /etc/apache2/conf-enabled: queste cartelle hanno lo stesso legame di sites-available e sites-enabled, ma sono utilizzate per conservare frammenti di configurazione che non riguardano gli host virtuali. I file in conf-available possono essere abilitati con il comando a2enconfig e disabilitati con a2disconfig.
  • /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 comandi a2enmod e a2dismod.

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.