GNU/Linux >> Linux Esercitazione >  >> Cent OS

Come installare e configurare Caddy Web Server con PHP su Fedora 34 / CentOS 8

Caddy è un server web open source scritto nel linguaggio Go. Fornisce supporto HTTP/3, TLS v1.3, configurazione SSL automatica con Let's Encrypt, proxy inverso e supporta più plug-in per estenderne le funzionalità. Ha il vantaggio di servire tutta la sua configurazione da un unico file, indipendentemente dal numero di siti che devi 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 proxy inverso insieme a poche altre funzionalità di sicurezza.

Prerequisiti

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

    $ sudo setenforce 0
    
  • Assicurati che tutto sia aggiornato.

    $ sudo dnf update
    

Passaggio 1:configurazione del firewall

Il primo passaggio consiste nel configurare il firewall per l'apertura delle 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 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

Puoi verificare l'installazione con il seguente comando.

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

Fase 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 controllare. 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 root la direttiva dice a Caddy di cercare i file da servire in /usr/share/caddy directory.

Il file_server La direttiva 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 del caddy di base per servire un sito Web statico.

Crea una directory per ospitare il tuo sito Web e archiviare i 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 da testare 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 premere Y quando viene 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 premere Y quando viene richiesto di salvare il file.

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

Il log la direttiva restituisce il registro di accesso per il sito a /var/log/caddy/example.access.log file. 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. Puoi 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à il certificato SSL automaticamente senza alcun intervento. Il tls La direttiva ci consente di fornire opzioni aggiuntive per configurare HTTPS come l'indirizzo e-mail utilizzato per ottenere i rapporti Let's Encrypt.

L'header abilita il controllo della cache su tutti i file statici (file immagini/javascript/CSS). Puoi aggiungere più estensioni di file o copiare il codice per impostare una durata diversa per diversi formati di file. Dovrai modificare il valore static a qualcosa di diverso perché è un riferimento denominato.

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

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

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

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

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

Esegui il comando seguente per correggere l'errore.

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

Il comando precedente 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 pagina seguente, il che significa che la configurazione funziona.

Configurazione di più siti in Caddy

È possibile configurare più siti in un unico file caddy. Per farlo, crea blocchi separati per ogni 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 può diventare piuttosto grande e difficile da mantenere se ospiti 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 file di configurazione individuali per ogni sito.

Configurazione di siti PHP

Finora abbiamo parlato solo di servire siti statici utilizzando Caddy. Puoi usare Caddy altrettanto facilmente per servire 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

Abbiamo bisogno di impostare l'utente/gruppo Unix di processi PHP su caddy . Trova user=apache e group=apache righe 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.

...
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 nel html cartella.

$ 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ò essere utilizzato anche come server proxy inverso. Per configurarlo, usa il seguente codice.

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

Fase 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. È utile definire le opzioni globali in modo da non doverle dichiarare nuovamente in ogni blocco di server.

Dovresti includere le opzioni globali nella parte superiore del tuo Caddyfile. Ci sono molte opzioni che puoi impostare a livello globale. Analizzeremo 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 [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 e-mail utilizzato per la registrazione del certificato SSL con l'autorità Let's Encrypt. La pinzatura OCSP migliora le prestazioni dei siti HTTPS fornendo automaticamente informazioni sulla revoca dei certificati ai browser. Il max_header_size opzione 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 la semplice autenticazione HTTP per determinate directory. Innanzitutto, devi creare le credenziali di autenticazione.

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 sopra proteggerà il /secret directory con le credenziali appena create.

Rafforzamento della sicurezza del sito e abilitazione di 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 filtro XSS.
  3. Previene lo sniffing di contenuti/MIME.
  4. Evita che il tuo sito venga caricato all'interno di un IFRAME.
  5. Evita che il tuo sito venga incluso nelle prove di monitoraggio FLOC.
  6. Aggiunge una politica di sicurezza dei contenuti su come i programmi utente trattano gli URL non sicuri.
  7. Implementa una politica del referrer in modo che solo il referrer venga inviato per le richieste cross-origine se il protocollo dice lo stesso.
  8. Le norme sulle funzionalità forniscono un meccanismo per abilitare e disabilitare alcune funzionalità del browser.

Quindi, 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.


Cent OS
  1. Come installare Apache Web Server su CentOS 7

  2. Come installare e configurare VNC su CentOS 7

  3. Come installare e configurare Nextcloud con Apache su CentOS 7

  4. Come installare e configurare Nagios su CentOS 7

  5. Come installare e configurare un server NFS su CentOS 8

Come installare e configurare Nextcloud su Fedora 32

Come installare e configurare il server VNC su CentOS 7

Come installare e configurare Memcached su CentOS 8

Come installare Caddy Web Server su CentOS 7

Come installare e configurare Caddy Web Server con PHP su Rocky Linux 8

Come installare Caddy Web Server su CentOS 8