Come installare e configurare Caddy Web Server con PHP su Fedora 34/CentOS 8
Su questa pagina
- Prerequisiti
- Passaggio 1 - Configurazione del firewall
- Passaggio 2 - Installa Caddy
- Passaggio 3 - Nozioni di base sulla configurazione del caddy
- Configurazione di Caddy per un sito Web HTML di base
- Configurazione di più siti in Caddy
- Configurazione dei siti PHP
- Configurazione del proxy inverso
- Abilitazione dell'autenticazione HTTP
- Rafforzare la sicurezza del sito e abilitare HSTS
Caddy è un server web open source scritto nel linguaggio Go. Fornisce supporto HTTP/3, TLS v1.3, configurazione SSL automatica con Lets Encrypt, proxy inverso e supporta più plug-in per estenderne le funzionalità. Ha il vantaggio che tutta la sua configurazione viene servita da un singolo file, indipendentemente dal numero di siti che devi ospitare.
Questo tutorial riguarderà 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 proxy inverso insieme ad alcune altre funzionalità di sicurezza.
Prerequisiti
-
Fedora 34 or CentOS 8 based server
-
A non-root user with sudo privileges
-
A domain name pointing to the server IP address
-
SELinux is disabled.
$ sudo setenforce 0
-
Make sure everything is updated.
$ sudo dnf update
Passaggio 1: configurazione del 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 gli attuali servizi/porte consentiti.
$ sudo firewall-cmd --permanent --list-services
Dovrebbe mostrare il seguente output.
dhcpv6-client mdns ssh
Consenti porte HTTP e HTTPS.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Ricontrolla 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
Passaggio 2: installa 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
È possibile verificare l'installazione con il seguente comando.
$ caddy version v2.4.3 h1:Y1FaV2N4WO3rBqxSYA8UZsZTQdN+PwcoOcAiZTM8C0I=
Passaggio 3: nozioni di base sulla configurazione del caddy
Caddy utilizza JSON come formato principale per l'archiviazione o la scrittura della configurazione. È il modo più flessibile per 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 essere simile al seguente (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 verificare. Dovresti vedere la seguente pagina di benvenuto.Caddy offre molte funzionalità e configurazioni, quindi andremo solo con quelle importanti per servire il nostro sito web. La configurazione predefinita serve su HTTP, che è specificato come
:80
. La direttivaroot
dice a Caddy di cercare i file da servire nella directory/usr/share/caddy
.La direttiva
file_server
dice a Caddy di agire come un file server, il che significa che servirà solo file statici sull'indirizzo predefinito.Configurazione di 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 archiviare i tuoi file di registro.
$ 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 testarlo e aprilo per la modifica.
$ sudo nano /var/www/example.com/html/index.html
Aggiungi il seguente codice.
<!DOCTYPE html> <html> <head> <title>Hello from Caddy!</title> </head> <body> <h1>Hello, from Caddy!</h1> </body> </html>
Premi Ctrl + X per chiudere l'editor e premi Y quando ti viene chiesto di salvare il file.
Apri il Caddyfile per la modifica.
$ sudo nano /etc/caddy/Caddyfile
Sostituire 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 }
Premi Ctrl + X per chiudere l'editor e premi Y quando ti viene chiesto di salvare il file.
Esaminiamo tutte le direttive nel file. La direttiva
encode gzip
dice a Caddy di comprimere i file usando la compressione Gzip.La direttiva
log
emette il log di accesso per il sito nel file/var/log/caddy/example.access.log
. Per impostazione predefinita, Caddy ruota i file di registro quando raggiungono i 100 MB. I file ruotati vengono eliminati dopo 90 giorni o quando sono presenti più di 10 registri ruotati. È possibile modificare i parametri predefiniti nel modo seguente.log { output file /var/log/caddy/example.access.log { roll_size 10MB roll_keep 5 roll_keep_for 240h } }
Nel codice precedente, i file di registro ruotati sono limitati a 10 MB ed eliminati dopo 10 giorni (240 ore) o quando sono presenti più di 5 registri 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 e-mail utilizzato per ottenere i report Lets Encrypt.La direttiva
header
abilita il controllo della cache su tutti i file statici (immagini/javascript/file CSS). Puoi aggiungere più estensioni di file o copiare il codice per impostare una durata diversa per diversi formati di file. Dovrai cambiare il valorestatic
in qualcosa di diverso perché è un riferimento con nome.Una volta terminato, puoi convalidare la tua configurazione usando 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}
Eseguire il seguente comando per correggere l'errore.
$ caddy fmt --overwrite /etc/caddy/Caddyfile
Il comando precedente formatta e sovrascrive il Caddyfile.
Riavvia Caddy per abilitare la configurazione. Sarà necessario riavviare il server ogni volta che si apporta una modifica alla configurazione.
$ sudo systemctl restart caddy
Apri nel tuo browser e dovresti vedere la seguente pagina che significa che la configurazione sta funzionando.
Configurazione di più siti in Caddy
Puoi configurare più siti in un singolo file caddy. Per fare ciò, crea blocchi separati per ciascun sito nel modo seguente.
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 uno singolo può diventare piuttosto grande e difficile da mantenere se si ospitano 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/caddty/caddyfile
nella parte superiore del file.import caddyconf/*.conf
Il passaggio finale consiste nel creare singoli file di configurazione per ciascun sito.
Configurazione siti PHP
Finora abbiamo parlato solo di servire siti statici usando Caddy. Puoi utilizzare Caddy altrettanto facilmente per servire anche siti PHP dinamici. Per abilitare il supporto PHP, aggiungi il seguente codice all'interno del blocco del tuo 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 Unix/gruppo di processi PHP su caddy. Trova le righe
user=apache
egroup=apache
nel file e modificale 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 come segue.... 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 configurazione di PHP, crea un file
test.php
nella cartellahtml
.$ 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.
<?php phpinfo();
Avvia
http://example.com/test.php
nel tuo browser web e dovresti vedere quanto segue.Configurazione del proxy inverso
Caddy può anche essere utilizzato come server proxy inverso. Per configurarlo, utilizzare il seguente codice.
example1.com { ... reverse_proxy localhost:8000 { header_up Host {http.reverse_proxy.header.X-Forwarded-Host} } }
Passaggio 4: opzioni globali Caddy
Il Caddyfile ti consente di impostare alcune opzioni che saranno applicabili a livello globale, ovvero si applicheranno a tutti i tuoi siti. È vantaggioso definire opzioni globali in modo da non doverle dichiarare nuovamente in ogni blocco del server.
Dovresti includere le opzioni globali nella parte superiore del tuo Caddyfile. Ci sono molte opzioni che puoi impostare a livello globale. Ne esamineremo solo alcuni importanti. Per il resto, dovresti fare riferimento alla documentazione di Caddy.
Ecco alcune opzioni predefinite che puoi utilizzare nel tuo Caddyfile.
{ #TLS Options email servers :443 { protocol { experimental_http3 } max_header_size 5mb } servers :80 { protocol { allow_h2c } max_header_size 5mb } }
Nel codice precedente
email
specifica l'ID e-mail utilizzato per la registrazione del certificato SSL con l'autorità Lets Encrypt. La pinzatura OCSP migliora le prestazioni dei siti HTTPS fornendo automaticamente informazioni sulla revoca dei certificati ai browser. L'opzionemax_header_size
specifica la dimensione delle intestazioni della richiesta 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 alla fine, quindi fai attenzione prima di abilitarle.
Passaggio 5: miglioramento della sicurezza
Abilitazione dell'autenticazione HTTP
È possibile abilitare l'autenticazione HTTP semplice per determinate directory. Innanzitutto, devi creare le credenziali di autenticazione per esso.
Caddy accetta solo password con hash nella configurazione. Quindi, devi prima creare una password con hash. 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 precedente proteggerà la directory
/secret
con le credenziali appena create.Rafforzare la sicurezza del sito e abilitare HSTS
Esistono 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 ad esso.
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 precedente abilita/implementa quanto segue.
- Abilita il supporto HSTS per il sito e tutti i suoi sottodomini.
- Abilita il filtro XSS.
- Previene lo sniffing di contenuto/MIME.
- Impedisce che il tuo sito venga caricato all'interno di un IFRAME.
- Impedisce al tuo sito di essere incluso nelle prove di tracciamento FLOC.
- Aggiunge una politica di sicurezza dei contenuti su come gli agenti utente trattano gli URL non sicuri.
- Implementa una politica di referrer in modo che solo il referrer venga inviato per richieste cross-origin se il protocollo dice lo stesso.
- I criteri sulle funzionalità forniscono 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 sull'installazione e la configurazione del server web Caddy su server basati su Fedora 34/CentOS 8. Se hai domande, pubblicale nei commenti qui sotto.