- 1 1. Introduzione
 - 2 2. Installazione e configurazione iniziale di Ubuntu
 - 3 3. Installazione e configurazione di Apache
 - 4 4. Configurazione dei Virtual Host (Gestione di Più Siti Web)
- 4.1 Cos’è un Virtual Host?
 - 4.2 Passi per Configurare i Virtual Host
- 4.2.1 1. Crea Directory per Ogni Sito
 - 4.2.2 2. Cambia la Proprietà delle Directory
 - 4.2.3 3. Crea un File HTML di Test
 - 4.2.4 4. Crea File di Configurazione per i Virtual Host
 - 4.2.5 Configurazione per example.com
 - 4.2.6 Configurazione per test.com
 - 4.2.7 5. Abilita i Virtual Host
 - 4.2.8 Testa la Configurazione di Apache
 
 - 4.3 6. Test Locale (Modifica del File hosts)
 
 - 5 5. Abilitazione SSL/TLS (HTTPS)
 - 6 6. Migliorare la sicurezza del server web
 - 7 7. Ottimizzazione delle prestazioni
 - 8 8. Risoluzione dei problemi
 - 9 9. Riepilogo
- 9.1 Cosa hai imparato
 - 9.2 Prossimi passi
 - 9.3 Domande frequenti (FAQ)
- 9.3.1 Q1: Dovrei scegliere Nginx o Apache per il mio server web?
 - 9.3.2 Q2: I certificati SSL possono essere rinnovati automaticamente?
 - 9.3.3 Q3: Come posso migliorare ulteriormente la sicurezza del mio server?
 - 9.3.4 Q4: Come posso migliorare le prestazioni di Apache?
 - 9.3.5 Q5: Perché ricevo un errore “403 Forbidden”?
 
 - 9.4 Considerazioni finali
 
 
1. Introduzione
Cos’è un server web Ubuntu?
Un server web è un sistema che distribuisce siti web su Internet. I software di server web più popolari includono Apache, Nginx e LiteSpeed, ma il più diffuso su Ubuntu è Apache.
 Ubuntu è leggero, altamente stabile e open-source, il che lo rende una scelta popolare sia per privati che per aziende. È particolarmente adatto per costruire uno stack LAMP (Linux, Apache, MySQL/MariaDB, PHP), comunemente usato per eseguire siti web e applicazioni web.
A chi è destinata questa guida?
Questo articolo è pensato per principianti che stanno configurando un server web per la prima volta. Fornisce una guida passo‑passo su come installare Apache su Ubuntu, configurare host virtuali, impostare certificati SSL, ottimizzare le prestazioni e migliorare la sicurezza.
Cosa imparerai
- Come configurare un server web su Ubuntu (installazione e configurazione di Apache)
 - Configurare host virtuali per gestire più siti web
 - Installare certificati SSL gratuiti con Let’s Encrypt
 - Migliorare sicurezza e ottimizzare le prestazioni del server
 - Risolvere i problemi comuni dei server web
 
2. Installazione e configurazione iniziale di Ubuntu
Requisiti di sistema
Per eseguire Ubuntu come server web, si raccomandano le seguenti specifiche minime di sistema:
| Component | Minimum Requirements | Recommended Requirements | 
|---|---|---|
| OS | Ubuntu 22.04 LTS | Ubuntu 22.04 LTS | 
| CPU | 1GHz or higher | 2GHz or higher | 
| Memory | 512MB | 2GB or higher | 
| Storage | 10GB or more | 20GB or more | 
| Network | Internet connection | High-speed connection recommended | 
Scaricare e installare Ubuntu
Puoi scaricare Ubuntu dal sito ufficiale: https://ubuntu.com/download/server. Una volta ottenuto il file ISO, puoi installarlo usando VirtualBox o VMware per un ambiente virtuale, oppure su un server dedicato o VPS.
Passaggi di installazione:
- Creare il supporto di installazione
 
- Utilizzare una chiavetta USB (con strumenti come Rufus)
 - Montare il file ISO in una macchina virtuale
 
- Seguire la procedura guidata di installazione
 
- Impostare la lingua su Inglese
 - Verificare la connettività di rete
 - Configurare nome utente e password
 - Installare il server SSH (opzionale, può essere fatto in seguito)
 
- Completare la configurazione del sistema operativo e riavviare
 - Accedere e avviare la configurazione iniziale
 
Configurazione iniziale di base
Dopo l’installazione, eseguire i seguenti passaggi di configurazione iniziale:
- Aggiornare i pacchetti di sistema
 
sudo apt update && sudo apt upgrade -y
→ Questo garantisce che le patch di sicurezza e gli aggiornamenti software vengano applicati.
- Impostare il fuso orario
 
sudo timedatectl set-timezone America/New_York
→ Imposta il fuso orario in base alla posizione del tuo server.
- Abilitare il firewall
 
sudo ufw enable
→ Questo protegge il server da accessi non autorizzati.
- Configurare SSH (per la gestione remota)
 
- Verificare se SSH è abilitato: 
sudo systemctl status ssh - Se non è abilitato, avviarlo: 
sudo systemctl enable --now ssh 
Una volta applicate queste impostazioni iniziali, il server Ubuntu è pronto per essere configurato come server web.
3. Installazione e configurazione di Apache
Cos’è Apache?
Apache (officially Apache HTTP Server) è un software di server web open-source noto per la sua stabilità, scalabilità e sicurezza. Circa il 30 % dei server web a livello mondiale utilizza Apache.
Caratteristiche principali:
- Gratuito e open-source
 - Architettura modulare per una facile personalizzazione
 - Supporta SSL/TLS per connessioni HTTPS sicure
 - Supporto host virtuali per gestire più siti web
 
Installazione di Apache
Su Ubuntu, Apache può essere installato facilmente usando il gestore di pacchetti apt.
Installare Apache
Eseguire i seguenti comandi per installare Apache:
sudo apt update
sudo apt install apache2 -y
Verificare l’installazione
Dopo l’installazione, controllare la versione di Apache:
apache2 -v
Esempio di output:
Server version: Apache/2.4.52 (Ubuntu)
Server built:   2023-07-01T12:34:56
Se vedi questo messaggio, Apache è stato installato correttamente.
Avviare, fermare e riavviare Apache
Apache è gestito usando il comando systemctl.
Avviare Apache
sudo systemctl start apache2
Abilitare Apache all’avvio
sudo systemctl enable apache2
Verificare lo stato di Apache
Per confermare che Apache è in esecuzione:
sudo systemctl status apache2
Se Apache è in esecuzione, vedrai uno stato “active (running)”.
Riavvia o Ferma Apache
Se hai bisogno di riavviare Apache dopo aver apportato modifiche alla configurazione:
sudo systemctl restart apache2
Per fermare temporaneamente Apache:
sudo systemctl stop apache2
4. Configurazione dei Virtual Host (Gestione di Più Siti Web)
Cos’è un Virtual Host?
Un virtual host è una funzionalità che permette a un singolo server Apache di ospitare più domini (o sottodomini).
Ad esempio, un singolo server può ospitare sia example.com che test.com.
Esistono due tipi di virtual host:
- Virtual Host Basato sul Nome
 
- Ospita più siti sullo stesso indirizzo IP
 - Il modo più comune per gestire più siti web
 
- Virtual Host Basato sull’IP
 
- Ogni sito è assegnato a un diverso indirizzo IP
 - Richiede più interfacce di rete sul server
 
Tipicamente, si utilizza il virtual hosting basato sul nome.
Passi per Configurare i Virtual Host
1. Crea Directory per Ogni Sito
Ogni virtual host richiede una directory dedicata per memorizzare i file del suo sito web.
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
2. Cambia la Proprietà delle Directory
Per assicurarsi che Apache possa accedere ai file, imposta il proprietario su www-data.
sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chown -R www-data:www-data /var/www/test.com/public_html
3. Crea un File HTML di Test
Per la verifica, crea un file index.html per ogni sito.
echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
echo "<h1>Welcome to test.com</h1>" | sudo tee /var/www/test.com/public_html/index.html
4. Crea File di Configurazione per i Virtual Host
Le configurazioni dei virtual host sono memorizzate in /etc/apache2/sites-available/.
Configurazione per example.com
Crea e modifica un file di configurazione:
sudo nano /etc/apache2/sites-available/example.com.conf
Aggiungi la seguente configurazione:
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>
Configurazione per test.com
sudo nano /etc/apache2/sites-available/test.com.conf
Aggiungi il seguente contenuto:
<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html
    <Directory /var/www/test.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/test.com_error.log
    CustomLog ${APACHE_LOG_DIR}/test.com_access.log combined
</VirtualHost>
5. Abilita i Virtual Host
Una volta creati i file di configurazione, abilitali con a2ensite.
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
Testa la Configurazione di Apache
Controlla gli errori di sintassi:
sudo apachectl configtest
Se l’output è:
Syntax OK
Riavvia Apache per applicare le modifiche:
sudo systemctl restart apache2
6. Test Locale (Modifica del File hosts)
Per verificare che i virtual host funzionino correttamente, modifica il tuo file hosts locale.
sudo nano /etc/hosts
Aggiungi le seguenti righe:
127.0.0.1 example.com
127.0.0.1 test.com
Dopo aver salvato, apri un browser e inserisci:
http://example.com/
Se vedi “Welcome to example.com”, l’installazione è riuscita.
5. Abilitazione SSL/TLS (HTTPS)
Cos’è SSL/TLS?
SSL (Secure Sockets Layer) e TLS (Transport Layer Security) sono tecnologie di crittografia che proteggono la comunicazione su Internet.
Vantaggi di SSL/TLS:
✅ Cifra la comunicazione (riduce i rischi di furto e manomissione dei dati)
 ✅ Migliora il posizionamento SEO (Google dà priorità ai siti HTTPS nei risultati di ricerca)
 ✅ Previene gli avvisi del browser (i siti HTTP possono mostrare “Non sicuro”)
 ✅ Protegge i pagamenti online e le credenziali di accesso
Utilizzare Let’s Encrypt per SSL gratuito
Let’s Encrypt è un’autorità di certificazione che fornisce certificati SSL gratuiti. Utilizziamo certbot per configurarlo facilmente.
Installa Certbot
sudo apt update
sudo apt install certbot python3-certbot-apache -y
Configura automaticamente SSL per Apache
sudo certbot --apache -d example.com -d www.example.com
Verifica che HTTPS funzioni
Dopo l’installazione, verifica:
https://example.com/
Se vedi un icona a lucchetto nel browser, SSL sta funzionando.
6. Migliorare la sicurezza del server web
Configurare un firewall (UFW)
Abilita il firewall e apri le porte necessarie
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp   # SSH
sudo ufw allow 80/tcp   # HTTP
sudo ufw allow 443/tcp  # HTTPS
sudo ufw enable
Proteggere SSH
Cambia la porta SSH
sudo nano /etc/ssh/sshd_config
Cambia:
Port 2222  # Change 22 to a custom port
Riavvia SSH:
sudo systemctl restart ssh
7. Ottimizzazione delle prestazioni
Ottimizzazione di Apache
Di default, Apache non è sempre ottimizzato per gestire un alto traffico in modo efficiente. Puoi modificare le seguenti impostazioni per migliorare le prestazioni.
Ottimizzare MPM (Modulo di Multi-Processing)
MPM (Modulo di Multi-Processing) determina come Apache elabora le richieste.
Verifica la configurazione MPM corrente:
apachectl -M | grep mpm
Esempio di output:
mpm_prefork_module (shared)
Se vedi mpm_prefork_module, considera di passare a mpm_event per migliori prestazioni.
Cambia a MPM Event:
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2
Abilitare KeepAlive
KeepAlive consente connessioni persistenti, riducendo il numero di nuove richieste.
Modifica il file di configurazione di Apache:
sudo nano /etc/apache2/apache2.conf
Aggiungi o modifica le seguenti impostazioni:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Riavvia Apache:
sudo systemctl restart apache2
Sfruttare la cache
L’uso della cache lato browser e server riduce le richieste ridondanti, migliorando i tempi di risposta.
Abilita mod_expires per la cache del browser
sudo a2enmod expires
sudo systemctl restart apache2
Modifica il file di configurazione del tuo virtual host:
sudo nano /etc/apache2/sites-available/example.com.conf
Aggiungi:
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>
Riavvia Apache:
sudo systemctl restart apache2
Abilitare la compressione Gzip
Abilita la compressione per ridurre le dimensioni dei file e migliorare la velocità di caricamento.
Abilita mod_deflate
sudo a2enmod deflate
sudo systemctl restart apache2
Modifica il file di configurazione del virtual host:
sudo nano /etc/apache2/sites-available/example.com.conf
Aggiungi:
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
Riavvia Apache:
sudo systemctl restart apache2
Limitare le risorse
Per evitare un uso eccessivo delle risorse, limita il numero di connessioni per IP.
Abilita mod_ratelimit
sudo a2enmod ratelimit
sudo systemctl restart apache2
Modifica il file di configurazione del virtual host:
sudo nano /etc/apache2/sites-available/example.com.conf
Aggiungi:
<Location />
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 200
</Location>
Riavvia Apache:
sudo systemctl restart apache2
8. Risoluzione dei problemi
Apache non si avvia o si arresta inaspettatamente
Controlla lo stato di Apache
sudo systemctl status apache2
Se l’output contiene:
Active: failed
Allora si è verificato un errore.
Controlla i log degli errori
sudo journalctl -xe
sudo tail -f /var/log/apache2/error.log
Controlla i conflitti di porta
sudo netstat -tulnp | grep ':80'
Oppure:
sudo lsof -i:80
Problemi con il certificato SSL
Certificato SSL scaduto
sudo certbot renew --force-renewal
Errore di configurazione SSL di Apache
Modifica il file di configurazione SSL di Apache:
sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf
Verifica:
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Riavvia Apache:
sudo systemctl restart apache2
Sito web non si carica (Errori 403, 404, 500)
403 Forbidden
sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html
404 Non trovato
Controlla la configurazione del virtual host:
DocumentRoot /var/www/example.com/public_html
Abilita mod_rewrite se necessario:
sudo a2enmod rewrite
sudo systemctl restart apache2
500 Errore interno del server
Controlla i log degli errori:
sudo tail -f /var/log/apache2/error.log
Prova a rinominare .htaccess:
mv /var/www/example.com/public_html/.htaccess /var/www/example.com/public_html/.htaccess.bak
9. Riepilogo
Cosa hai imparato
Rivediamo i temi principali trattati in questa guida.
| Section | Key Points | 
|---|---|
| 1. Introduction | Overview of Ubuntu Web Server and the purpose of this guide | 
| 2. Installing and Initial Setup of Ubuntu | Setting up Ubuntu, updating packages, and configuring the firewall | 
| 3. Installing and Configuring Apache | Installing Apache, starting the service, and verifying functionality | 
| 4. Configuring Virtual Hosts | Hosting multiple websites on a single Apache server | 
| 5. Enabling SSL/TLS | Using Let’s Encrypt for HTTPS setup | 
| 6. Enhancing Web Server Security | Firewall setup, SSH security, and Apache hardening | 
| 7. Performance Optimization | Using caching, compression, and tuning Apache settings | 
| 8. Troubleshooting | Fixing Apache errors, SSL issues, and common website errors | 
Prossimi passi
Ora che il tuo server web Ubuntu è attivo e funzionante, considera di approfondire argomenti più avanzati per migliorare le capacità del tuo server:
✅ Distribuire applicazioni WordPress o PHP
 ✅ Configurare un server di database (MySQL / MariaDB)
 ✅ Configurare Nginx come reverse proxy per Apache
 ✅ Implementare l’auto-scaling con piattaforme cloud (AWS, GCP, Azure)
 ✅ Logging e monitoraggio avanzati (Fail2Ban, Logwatch, Prometheus)
Domande frequenti (FAQ)
Q1: Dovrei scegliere Nginx o Apache per il mio server web?
A1: Se il tuo sito serve principalmente contenuti statici, si consiglia Nginx. Se hai bisogno di elaborare contenuti dinamici (come PHP), Apache è una scelta migliore. Puoi anche usare Nginx come reverse proxy davanti ad Apache.
Q2: I certificati SSL possono essere rinnovati automaticamente?
A2: Sì, Certbot supporta il rinnovo automatico. Puoi verificare lo stato del rinnovo con:
sudo certbot renew --dry-run
Per un rinnovo completamente automatico, è consigliato configurare un cron job.
Q3: Come posso migliorare ulteriormente la sicurezza del mio server?
A3: Implementa Fail2Ban per prevenire attacchi brute-force, nascondi i dettagli della versione di Apache, disabilita i moduli inutilizzati e applica pratiche di sicurezza SSH robuste.
Q4: Come posso migliorare le prestazioni di Apache?
A4: Passa a MPM Event, abilita caching (mod_cache), usa compressione gzip (mod_deflate) e ottimizza le impostazioni KeepAlive.
Q5: Perché ricevo un errore “403 Forbidden”?
A5: Assicurati che la proprietà della directory sia impostata su www-data e regola i permessi dei file:
sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html
Considerazioni finali
Configurare un server web Ubuntu richiede più passaggi, dall’installazione e configurazione all’ottimizzazione e risoluzione dei problemi. Tuttavia, una volta compreso il processo, puoi costruire e gestire un potente ambiente di hosting web.
🚀 Segui questa guida per creare un server web sicuro, veloce e affidabile, e continua a migliorare le tue competenze come amministratore di server! 🚀

 
![Cause e soluzioni per l’impossibilità di inserire la password o accedere su Ubuntu [Guida completa per principianti]](https://www.linux.digibeatrix.com/wp-content/uploads/2025/01/222e1410df4982d8e85d09bb3e3389af-375x214.webp)
