Vai al contenuto

Come installare il server web Caddy più recente su Rocky Linux

Introduzione

Caddy è un server web progettato per le applicazioni web moderne. Caddy è semplice da configurare e dispone della funzione Let's Encrypt automatica, in modo che i vostri siti web siano sempre sicuri per impostazione predefinita. È il server web preferito dall'autore.

Ecco una breve panoramica delle caratteristiche di Caddy:

  • Un server web di base
  • Un reverse proxy per dirigere il traffico verso più siti
  • Moduli per molti carichi di lavoro, tra cui TCP, SSH e altro ancora
  • Un bilanciatore di carico integrato per gestire il traffico verso più siti web
  • Supporto a Let's Encrypt integrato e automatizzato
  • Un'API per riconfigurare il server in modo programmatico
  • Supporto a PHP FastCGI
  • E IPv6

Prerequisiti e presupposti

Sono necessari:

  • Una macchina o un server Rocky Linux connesso a internet.
  • Una familiarità di base con la riga di comando.
  • La possibilità di eseguire comandi come utente root o con sudo.
  • Un editor di testo a tua scelta, sia grafico che a riga di comando. Per questo tutorial, l'autore utilizza vim.
  • Un nome di dominio o un altro hostname che punta all'indirizzo IP pubblico del server.

Installazione di Caddy

Innanzitutto, assicuratevi che il vostro computer disponga degli ultimi aggiornamenti:

sudo dnf update

Quindi, installare il repository software epel-release:

sudo dnf install -y epel-release

Quindi, installare il server web caddy:

sudo dnf install -y caddy

Configurare il firewall

Se si tenta di visualizzare una pagina Web con l'indirizzo IP o il nome di dominio della propria macchina da un altro computer, probabilmente non si otterrà nulla. Questo sarà il caso se avete un firewall attivo e funzionante.

Per aprire le porte necessarie a "vedere" le pagine web, si utilizzerà il firewall integrato di Rocky Linux, firewalld. Il comando di firewalld per farlo è firewall-cmd.

Per aprire i servizi http e https, i servizi che gestiscono le pagine web, eseguire:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https

Per capire meglio:

  • L'opzione --permanent indica al firewall di applicare questa configurazione a ogni riavvio del firewall e al riavvio del server.
  • --zone=public indica al firewall di consentire le connessioni in entrata a questa porta da parte di tutti.
  • Infine, --add-service=http e --add-service=https indicano a firewalld di passare tutto il traffico HTTP e HTTPS al server.

Queste configurazioni non avranno effetto finché non si forzerà il problema. Per farlo, occorre indicare a firewalld di ricaricare le sue configurazioni:

sudo firewall-cmd --reload

Nota

Ora, c'è una piccolissima possibilità che questo non funzioni. In questi rari casi, fate in modo che `firewalld` esegua i vostri ordini con il vecchio spegnimento-e-riaccensione.

```bash
systemctl restart firewalld
```

Per garantire l'autorizzazione delle porte, eseguire firewall-cmd --list-all. Un firewall correttamente configurato avrà un aspetto simile a questo:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp9s0
  sources:
  services: cockpit dhcpv6-client ssh http https
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Dovrebbe essere tutto ciò di cui avete bisogno, a livello di firewall.

Configurare Caddy

A differenza dei server web tradizionali come Apache e Nginx, il formato di configurazione di Caddy è molto più semplice. Sono finiti i tempi in cui si dovevano configurare i dettagli, come il modello di threading del server web o i certificati SSL, a meno che non si volesse farlo.

Per modificare il file di configurazione di Caddy:

vim /etc/caddy/Caddyfile

Una configurazione statica minima del server web può essere simile a questa:

example.com {
    root * /usr/share/caddy/example.com
    file_server
}

Sostituire "example.com" con un nome di host che punta al proprio server.

È inoltre necessario aggiungere un sito web nella cartella della directory "root" di Caddy. Per semplicità, aggiungete un sito web statico di una pagina:

mkdir -p /usr/share/caddy/example.com
echo "<h1>Hi!</h1>" >> /usr/share/caddy/example.com/index.html

Successivamente, attivare il servizio systemd di Caddy:

systemctl enable --now caddy

Entro un minuto, Caddy otterrà i certificati SSL da Let's Encrypt. A questo punto, è possibile visualizzare il sito web appena impostato in un browser:

Caddy serve il nostro sito web dimostrativo

Dovrebbe avere un lucchetto SSL che dovrebbe funzionare in ogni browser moderno, e non solo, anche una valutazione A+ al Qualys SSL Server Test.

Opzionale: PHP FastCGI

Come accennato in precedenza, Caddy supporta il supporto FastCGI per PHP. La buona notizia è che, a differenza di Apache e Nginx, Caddy gestisce automaticamente le estensioni dei file PHP.

Per installare PHP, aggiungere prima il repository Remi (nota: se si utilizza Rocky Linux 8.x, si deve sostituire 8 dopo "release-"):

dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

Successivamente, occorre installare PHP (nota: se si utilizza un'altra versione di PHP, sostituire la versione desiderata al posto di php81):

dnf install -y php81-php-fpm

Se sono necessari altri moduli PHP (ad esempio, GD), aggiungerli al comando precedente.

Quindi, occorre configurare PHP per l'ascolto su un socket TCP:

vim /etc/opt/remi/php81/php-fpm.d/www.conf

Quindi, trovare la riga:

listen = /var/opt/remi/php81/run/php-fpm/www.sock

Sostituirla con questa:

listen = 127.0.0.1:9000

Quindi salvare e uscire dal file www.conf e aprire il file Caddy:

vim /etc/caddy/Caddyfile

Passare al blocco server creato in precedenza:

example.com {
    root * /usr/share/caddy/example.com
    file_server
}

Aggiungere la seguente riga dopo la riga "file_server":

    php_fastcgi 127.0.0.1:9000

Il blocco del server abilitato a PHP avrà questo aspetto:

example.com {
    root * /usr/share/caddy/example.com
    file_server
    php_fastcgi 127.0.0.1:9000
}

Quindi salvare e uscire dal Caddyfile e riavviare Caddy:

systemctl restart caddy

Per verificare se PHP funziona, aggiungiamo un semplice file PHP:

echo "<?php phpinfo(); ?>" >> /usr/share/caddy/rockyexample.duckdns.org/phpinfo.php

Aprite il vostro browser sul file creato e vi verranno presentate le informazioni su PHP:

Caddy serve il nostro file PHP

Conclusione

L'installazione e configurazione di base di Caddy è incredibilmente facile. Sono finiti i tempi in cui si passavano ore a configurare Apache. Sì, Nginx è certamente un miglioramento, ma manca ancora di funzionalità moderne ma essenziali come Let's Encrypt e il supporto per Kubernetes ingress che Caddy integra, mentre su Nginx (e Apache) è necessario aggiungerle separatamente.

Uso Caddy dal 2019 come server web di riferimento ed è davvero ottimo. In effetti, ogni volta che ho a che fare con Apache, Nginx o IIS, è quasi come prendere una macchina del tempo e tornare al 2010 o prima.

Author: Neel Chauhan

Contributors: Steven Spencer