Guida completa al server web Ubuntu | Apache + SSL + Ottimizzazione [Facile per principianti]

目次

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:

ComponentMinimum RequirementsRecommended Requirements
OSUbuntu 22.04 LTSUbuntu 22.04 LTS
CPU1GHz or higher2GHz or higher
Memory512MB2GB or higher
Storage10GB or more20GB or more
NetworkInternet connectionHigh-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:

  1. Creare il supporto di installazione
  • Utilizzare una chiavetta USB (con strumenti come Rufus)
  • Montare il file ISO in una macchina virtuale
  1. 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)
  1. Completare la configurazione del sistema operativo e riavviare
  2. Accedere e avviare la configurazione iniziale

Configurazione iniziale di base

Dopo l’installazione, eseguire i seguenti passaggi di configurazione iniziale:

  1. 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.

  1. Impostare il fuso orario
sudo timedatectl set-timezone America/New_York

→ Imposta il fuso orario in base alla posizione del tuo server.

  1. Abilitare il firewall
sudo ufw enable

→ Questo protegge il server da accessi non autorizzati.

  1. 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:

  1. Virtual Host Basato sul Nome
  • Ospita più siti sullo stesso indirizzo IP
  • Il modo più comune per gestire più siti web
  1. 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.

SectionKey Points
1. IntroductionOverview of Ubuntu Web Server and the purpose of this guide
2. Installing and Initial Setup of UbuntuSetting up Ubuntu, updating packages, and configuring the firewall
3. Installing and Configuring ApacheInstalling Apache, starting the service, and verifying functionality
4. Configuring Virtual HostsHosting multiple websites on a single Apache server
5. Enabling SSL/TLSUsing Let’s Encrypt for HTTPS setup
6. Enhancing Web Server SecurityFirewall setup, SSH security, and Apache hardening
7. Performance OptimizationUsing caching, compression, and tuning Apache settings
8. TroubleshootingFixing 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! 🚀

侍エンジニア塾