Server Web · 10 min read · Oct 30, 2025

Come Installare e Configurare il Server Web Caddy con PHP su Fedora 34 / CentOS 8

Caddy è un server web open-source scritto nel linguaggio Go. Fornisce supporto per HTTP/3, TLS v1.3, configurazione automatica SSL con Let’s Encrypt, reverse proxy e supporta più plugin per estendere la sua funzionalità. Ha il vantaggio di avere tutta la sua configurazione servita da un unico file, indipendentemente da quanti siti è necessario ospitare.

Questo tutorial tratterà l’installazione e la configurazione di Caddy e PHP su server basati su Fedora 34 e CentOS 8. Tratteremo come ospitare siti singoli e multipli e come utilizzare il reverse proxy insieme ad alcune altre funzionalità di sicurezza.

Requisiti

  • Server basato su Fedora 34 o CentOS 8
  • Un utente non root con privilegi sudo
  • Un nome di dominio che punta all’indirizzo IP del server
  • SELinux è disabilitato. shell $ sudo setenforce 0
  • Assicurati che tutto sia aggiornato. shell $ sudo dnf update

Passo 1 - Configurare il Firewall

Il primo passo è configurare il Firewall per aprire le porte HTTP e HTTPS. Fedora e CentOS vengono forniti con il firewall Firewalld preinstallato.

Controlla se il firewall è in esecuzione.

$ sudo firewall-cmd --state

Dovresti ottenere il seguente output.

running

Controlla i servizi/porte attualmente consentiti.

$ sudo firewall-cmd --permanent --list-services

Dovrebbe mostrare il seguente output.

dhcpv6-client mdns ssh

Consenti le porte HTTP e HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Controlla nuovamente lo stato del firewall.

$ sudo firewall-cmd --permanent --list-services

Dovresti vedere un output simile.

dhcpv6-client http https mdns ssh

Ricarica il Firewall.

$ sudo systemctl reload firewalld

Passo 2 - Installare Caddy

Il primo passo è installare il server. I passaggi di installazione rimangono gli stessi sia per Fedora 34 che per CentOS 8.

$ sudo dnf install 'dnf-command(copr)'
$ sudo dnf copr enable @caddy/caddy
$ sudo dnf install caddy

Puoi verificare l’installazione con il seguente comando.

$ caddy version
v2.4.3 h1:Y1FaV2N4WO3rBqxSYA8UZsZTQdN+PwcoOcAiZTM8C0I=

Passo 3 - Nozioni di Base sulla Configurazione di Caddy

Caddy utilizza JSON come formato principale per memorizzare o scrivere la configurazione. È il modo più flessibile di scrivere la configurazione e supporta tutte le funzionalità di Caddy. Ma se non sai come scrivere file JSON, Caddy offre un modo più semplice sotto forma di Caddyfile.

Il pacchetto Fedora / CentOS include un Caddyfile in /etc/caddy/Caddyfile. Dovrebbe apparire come segue (ignorando i commenti)

:80 {
        root * /usr/share/caddy
        file_server
}

Abilita e avvia il demone caddy.

$ sudo systemctl enable --now caddy

Puoi aprire l’URL http://youripaddress per controllare. Dovresti vedere la seguente pagina di benvenuto.

Pagina di Benvenuto di Caddy

Caddy offre molte funzionalità e configurazioni, quindi ci concentreremo solo su quelle importanti per servire il nostro sito web. La configurazione predefinita serve tramite HTTP, che è specificato come :80. La direttiva root indica a Caddy di cercare i file da servire nella directory /usr/share/caddy.

La direttiva file_server indica a Caddy di agire come un server di file, il che significa che servirà solo file statici all’indirizzo predefinito.

Configurare Caddy per un Sito Web HTML di Base

Creiamo un file di configurazione caddy di base per servire un sito web statico.

Crea una directory per ospitare il tuo sito web e memorizzare i tuoi file di log.

$ sudo mkdir -p /var/www/example.com/html
$ sudo mkdir /var/log/caddy

Imposta la proprietà della directory su Caddy.

$ sudo chown caddy:caddy /var/www/example.com/html -R
$ sudo chown caddy:caddy /var/log/caddy

Crea un file HTML per testare e aprilo per la modifica.

$ sudo nano /var/www/example.com/html/index.html

Aggiungi il seguente codice.




Ciao da Caddy!


Ciao, da Caddy!

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Apri il Caddyfile per la modifica.

$ sudo nano /etc/caddy/Caddyfile

Sostituisci il codice esistente con il seguente.

example.com {
    root * /var/www/example.com/html
    file_server
    encode gzip

    log {
        output file /var/log/caddy/example.access.log
    }

    @static {
        file
        path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.pdf *.webp
    }
    header @static Cache-Control max-age=5184000

    tls [email protected]
}

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Esaminiamo tutte le direttive nel file. La direttiva encode gzip indica a Caddy di comprimere i file utilizzando la compressione Gzip.

La direttiva log scrive il registro degli accessi per il sito nel file /var/log/caddy/example.access.log. Per impostazione predefinita, Caddy ruota i file di log quando raggiungono 100 MB. I file ruotati vengono eliminati dopo 90 giorni o quando ci sono più di 10 log ruotati. Puoi modificare i parametri predefiniti nel seguente modo.

log {
    output file /var/log/caddy/example.access.log {
        roll_size 10MB
        roll_keep 5
        roll_keep_for 240h
    }
}

Nel codice sopra, i file di log ruotati sono limitati a 10 MB e vengono eliminati dopo 10 giorni (240 ore) o quando ci sono più di 5 log ruotati.

Caddy genererà e installerà automaticamente il certificato SSL senza alcun intervento. La direttiva tls ci consente di fornire opzioni extra per configurare HTTPS, come l’indirizzo email utilizzato per ottenere i rapporti di Let’s Encrypt.

La direttiva header abilita il Cache-control su tutti i file statici (immagini/javascript/file CSS). Puoi aggiungere ulteriori estensioni di file o copiare il codice per impostare una durata diversa per diversi formati di file. Dovrai cambiare il valore static in qualcosa di diverso perché è un riferimento nominato.

Una volta terminato, puoi convalidare la tua configurazione utilizzando il seguente comando.

$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile

Dobbiamo usare l’opzione --adapter caddyfile perché, per impostazione predefinita, il comando convalida solo le configurazioni JSON.

Se ricevi il seguente avviso, puoi risolverlo facilmente con un singolo comando.

WARN    input is not formatted with 'caddy fmt' {"adapter": "caddyfile", "file": "/etc/caddy/Caddyfile", "line": 2}

Esegui il seguente comando per correggere l’errore.

$ caddy fmt --overwrite /etc/caddy/Caddyfile

Il comando sopra formatta e sovrascrive il Caddyfile.

Riavvia Caddy per abilitare la configurazione. Dovrai riavviare il server ogni volta che apporti una modifica alla configurazione.

$ sudo systemctl restart caddy

Apri nel tuo browser e dovresti vedere la seguente pagina, il che significa che la configurazione funziona.

Configurare Siti Multipli in Caddy

Puoi configurare più siti in un singolo file caddy. Per farlo, crea blocchi separati per ogni sito nel seguente modo.

example1.com {
    root * /var/www/example1.com/html
    ...
}

example2.com {
    root * /var/www/example2.com/html
    ...
}

Questo metodo va bene per un paio di siti, ma un singolo file può diventare piuttosto grande e difficile da mantenere se stai ospitando più siti.

Crea la directory /etc/caddy/caddyconf.

$ sudo mkdir /etc/caddy/caddyconf

Ora puoi importare i file di configurazione dalla directory nel tuo /etc/caddy/Caddyfile nella parte superiore del file.

import caddyconf/*.conf

L’ultimo passo è creare file di configurazione individuali per ogni sito.

Configurare Siti PHP

Finora, abbiamo parlato solo di servire siti statici utilizzando Caddy. Puoi utilizzare Caddy altrettanto facilmente per servire siti PHP dinamici. Per abilitare il supporto PHP, aggiungi il seguente codice all’interno del tuo blocco sito.

example1.com {
    root * /var/www/example1.com/html
    ...
    php_fastcgi unix//run/php-fpm/www.sock
}

Dovrai anche installare PHP.

$ sudo dnf install php-fpm php-cli php-gd

Puoi installare qualsiasi modulo PHP aggiuntivo di cui hai bisogno. Dovrai anche configurare il file /etc/php-fpm.d/www.conf. Apri il file per la modifica.

$ sudo nano /etc/php-fpm.d/www.conf

Dobbiamo impostare l’utente/gruppo Unix dei processi PHP su caddy. Trova le righe user=apache e group=apache nel file e cambiale in nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...

Trova la riga listen.acl_users = apache,nginx e cambia il suo valore nel seguente modo.

...
listen.acl_users = apache,nginx,caddy
...

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Avvia il processo PHP-fpm.

$ sudo systemctl start php-fpm

Per testare la tua configurazione PHP, crea un file test.php nella cartella html.

$ sudo nano /var/www/example.com/html/test.php

Aggiungi il seguente contenuto e salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Lancia http://example.com/test.php nel tuo browser e dovresti vedere quanto segue.

Pagina di Test PHP di Caddy

Configurare il Reverse Proxy

Caddy può essere utilizzato anche come server reverse proxy. Per configurarlo, utilizza il seguente codice.

example1.com {
    ...
    reverse_proxy localhost:8000 {
        header_up Host {http.reverse_proxy.header.X-Forwarded-Host}
    }
}

Passo 4 - Opzioni Globali di Caddy

Il Caddyfile consente di impostare alcune opzioni che saranno applicabili globalmente, cioè si applicheranno a tutti i tuoi siti. È utile definire opzioni globali in modo da non doverle ridefinire in ogni blocco server.

Dovresti includere le opzioni globali nella parte superiore del tuo Caddyfile. Ci sono molte opzioni che puoi impostare globalmente. Tratteremo solo alcune importanti. Per il resto, dovresti fare riferimento alla documentazione di Caddy.

Ecco alcune opzioni predefinite che puoi utilizzare nel tuo Caddyfile.

{ 
    #Opzioni TLS
    email [email protected]

    servers :443 {
        protocol {
            experimental_http3
        }
        max_header_size 5mb
    }
    
    servers :80 {
        protocol {
            allow_h2c
        }
        max_header_size 5mb
    }
}

Nel codice sopra, email specifica l’ID email utilizzato per registrare il certificato SSL con l’autorità di Let’s Encrypt. L’OCSP stapling migliora le prestazioni dei siti HTTPS fornendo automaticamente informazioni sulla revoca dei certificati ai browser. L’opzione max_header_size specifica la dimensione delle intestazioni delle richieste HTTP del client da analizzare.

Abbiamo anche abilitato il protocollo HTTP/3 per i siti HTTPS e il supporto HTTP/2 per i siti HTTP. Queste sono funzionalità sperimentali e probabilmente verranno rimosse in futuro, quindi fai attenzione prima di abilitarle.

Passo 5 - Migliorare la Sicurezza

Abilitare l’Autenticazione HTTP

Puoi abilitare una semplice autenticazione HTTP per determinate directory. Prima, devi creare credenziali di autenticazione per questo.

Caddy accetta solo password hashate nella configurazione. Quindi, devi prima creare una password hashata. Esegui il seguente comando per farlo.

$ caddy hash-password
Enter password:
Confirm password:
JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX

Una volta che hai la password pronta, inserisci il seguente codice nel tuo Caddyfile.

basicauth /secret/* {
    John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}

Il comando sopra proteggerà la directory /secret con le credenziali che hai appena creato.

Indurire la Sicurezza del Sito e abilitare HSTS

Ci sono altre configurazioni di sicurezza che puoi aggiungere per proteggere i tuoi siti. Per questo, creeremo un altro file /etc/caddy/caddy_security.conf.

$ sudo nano /etc/caddy/caddy_security.conf

Aggiungi il seguente codice.

header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Xss-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "DENY"
    Permissions-Policy "interest-cohort=()"
    Content-Security-Policy "upgrade-insecure-requests"
    Referrer-Policy "strict-origin-when-cross-origin"
    Cache-Control "public, max-age=15, must-revalidate"
    Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'self'; camera 'none'; encrypted-media 'none'; fullscreen 'self'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; payment 'none'; picture-in-picture *; speaker 'none'; sync-xhr 'none'; usb 'none'; vr 'none'"
}

Il codice sopra abilita/implementa quanto segue.

  1. Abilita il supporto HSTS per il sito e tutti i suoi sottodomini.
  2. Abilita il filtraggio XSS.
  3. Previene il Content/MIME Sniffing.
  4. Impedisce al tuo sito di essere caricato all’interno di un IFRAME.
  5. Impedisce al tuo sito di essere incluso nelle prove di tracciamento FLOC.
  6. Aggiunge una politica di sicurezza dei contenuti su come gli agenti utente trattano gli URL non sicuri.
  7. Implementa una politica di referrer in modo che solo il referrer venga inviato per le richieste cross-origin se il protocollo dice lo stesso.
  8. La Feature Policy fornisce un meccanismo per abilitare e disabilitare determinate funzionalità del browser.

Successivamente, importa il file in uno qualsiasi dei blocchi del sito che desideri.

example.com {
    ...
    import /etc/caddy/caddy_security.conf
}

Riavvia il server per implementare la modifica.

Conclusione

Questo conclude il tutorial su come installare e configurare il server web Caddy su server basati su Fedora 34 / CentOS 8. Se hai domande, postale nei commenti qui sotto.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.