FreeBSD, Caddy e PHP - un connubio perfetto

NOTA: Il seguente post è la traduzione dell'equivalente in inglese sul blog it-notes. L'originale sarà sempre più aggiornato.

Caddy è un ottimo server web. È più facile da configurare rispetto a nginx e gestisce le richieste/rinnovi dei certificati ssl, quindi non è necessario utilizzare certbot/cron. A volte si potrebbe preferire usare Caddy invece di Nginx/Apache/Lighttpd/etc.

FreeBSD e Caddy funzionano molto bene insieme per siti web statici/reverse proxy, ma spesso abbiamo bisogno di servire siti web dinamici. Aggiungere PHP è abbastanza facile.

Iniziamo con l'installare e abilitare Caddy:

pkg install caddy  
service caddy enable

Ora installiamo PHP - diciamo PHP 8.1 - e abilitiamo php-fpm:

pkg install php81
service php-fpm enable

Preferisco usare php-fpm tramite socket locali, se il server web e php-fpm sono in esecuzione sullo stesso host. Perciò modifichiamo alcune configurazioni modificando /usr/local/etc/php-fpm.d/www.conf:

Cambiamo la configurazione da:

_listen = 127.0.0.1:9000_

a

_listen = /var/run/php81.sock_

Cambiamo ora il proprietario del socket, basta decommentare:

listen.owner = www  
listen.group = www  
listen.mode = 0660

Avviamo ora php-fpm:

service php-fpm start

Ora va modificato /usr/local/etc/caddy/Caddyfile. Basta aggiungere qualcosa del genere:

my.website.com {  
root * /usr/local/www/website  
php_fastcgi unix//var/run/php81.sock  
file_server  
}

Questo configurerà un virtualhost chiamato my.website.com (e Caddy cercherà di ottenere un certificato per esso), con la sua radice su /usr/local/www/website e processerà qualsiasi richiesta di file .php tramite php socket. La direttiva file_server assicura che i file statici possano essere serviti dal percorso principale.

Avviamo ora Caddy:

service caddy start

Questo è tutto. Naturalmente si tratta di una configurazione molto elementare, ma può essere usata come bozza per setup più avanzati. Per esempio, si può aggiungere qualcosa del tipo:

    @disallowed {
        path /xmlrpc.php
        path *.sql
        path /wp-content/uploads/*.php
    }

    rewrite @disallowed '/index.php'

e potrete avere un'installazione di Wordpress funzionante (e abbastanza sicura).

Commenti