Come configuri PHP su Apache fa differenza sulla sicurezza del tuo sito. La scelta tra mod_php (il modulo Apache classico) e PHP-FPM (FastCGI Process Manager) non è solo una questione di performance, ma anche di isolamento, permessi dei file e protezione dagli attacchi. Questa guida confronta le due architetture in profondità.

Cosa sono mod_php e PHP-FPM

mod_php: il modulo Apache integrato

mod_php è un modulo Apache che carica l'interprete PHP direttamente nel processo Apache. Significa che PHP e il web server condividono lo stesso processo con gli stessi permessi (di solito l'utente www-data).

Pro:

  • Semplice da configurare su hosting condiviso
  • Accesso diretto al filesystem senza comunicazione inter-processo
  • Nessuna configurazione aggiuntiva di socket o porte

Contro:

  • PHP ha gli stessi permessi di Apache — se Apache viene compromesso, PHP ha accesso completo
  • Non isolamento tra siti su server condiviso: una vulnerabilità di un cliente PHP può compromettere gli altri
  • Caricamento di memoria: ogni worker Apache carica l'intera VM di PHP
  • Difficile da ricaricare: riavviare PHP richiede il riavvio di Apache

PHP-FPM: isolamento e performance

PHP-FPM è un gestore separato di processi PHP. Apache e PHP girano in processi separati, comunicano via socket o rete. PHP può girare con permessi diversi, isolati da Apache.

Pro:

  • Isolamento di sicurezza: PHP non ha accesso ai file di sistema di Apache
  • Permessi granulari: ogni sito/applicazione può girare con il proprio utente (ad es. utente1, utente2, etc)
  • Ricaricamento indipendente: puoi ricaricare PHP senza toccare Apache
  • Pool di processi: controllo fine su quante risorse PHP usa
  • Compatibilità con load balancer e container

Contro:

  • Configurazione più complessa (socket/TCP, connessione tra processi)
  • Leggermente più lento (IPC overhead)
  • Su hosting condiviso, il provider deve configurare pool separati per cliente

Confronto di sicurezza in dettaglio

Permessi dei file

mod_php: PHP legge/scrive file con i permessi di Apache. Se hai un sito A e un sito B sulla stessa istanza, PHP del sito A può leggere/modificare i file del sito B.

PHP-FPM: Puoi assegnare a ogni sito un utente diverso. Il sito A gira come "sito-a-user", il sito B come "sito-b-user". Anche se una vulnerabilità colpisce il sito A, l'attaccante non può accedere ai file del sito B (il filesystem lo blocca).

Risposta agli attacchi recenti di RCE

Quando una vulnerabilità RCE come CVE-2026-109618 o CVE-2026-109619 consente l'esecuzione di codice arbitrario in PHP:

  • Con mod_php: il codice eseguito ha i permessi di Apache. Un attaccante può leggere il database.php di altri siti, modificare file di configurazione globale, accedere a file sensibili.
  • Con PHP-FPM: il codice eseguito ha i soli permessi dell'utente del sito vulnerabile. Un attaccante può compromettere solo quel sito, gli altri restano intatti.

Performance: mod_php vs PHP-FPM

Storicamente, mod_php era più veloce (no overhead IPC). Oggi PHP-FPM è comparabile o più veloce nei numeri che contano: throughput, latenza, tempo risposta sotto carico. Il motivo:

  • PHP-FPM usa meno memoria (worker pool vs ogni Apache process carica una VM intera)
  • CPU: il costo IPC è ridotto, parallelizzazione è migliore
  • Su load balancer, la separazione Apache/PHP facilita lo scaling orizzontale

Quale scegliere?

mod_php PHP-FPM
Sito singolo, server dedicato ❌ (niente isolamento) ✅ (meglio)
Siti multipli (hosting condiviso) ❌ (isolamento zero) ✅ (isolamento per cliente)
Applicazione critica ❌ (vulnerabilità = accesso totale) ✅ (confinamento danni)
Container/Kubernetes ❌ (non idoneo) ✅ (standard)

Come migrare da mod_php a PHP-FPM

Su un server Debian/Ubuntu:

# 1. Installa PHP-FPM
sudo apt install php8.4-fpm

# 2. Abilita il modulo proxy di Apache
sudo a2enmod proxy_fcgi

# 3. Configura il vhost per usare PHP-FPM
# Nel file di config Apache (es. /etc/apache2/sites-available/mio-sito.conf):
<VirtualHost *:80>
    ServerName mio-sito.com
    DocumentRoot /var/www/mio-sito

    <FilesMatch "\.php$">
        SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

# 4. Ricarica Apache
sudo systemctl reload apache2

Configura pool per isolamento

Nel file /etc/php/8.4/fpm/pool.d/mio-sito.conf:

[mio-sito]
user = sito-user
group = sito-group
listen = /run/php/mio-sito.sock
listen.owner = www-data
listen.group = www-data

Crea l'utente:

sudo useradd -s /usr/sbin/nologin -m sito-user

Conclusione

PHP-FPM è la scelta moderna per qualsiasi server PHP serio. Offre isolamento di sicurezza, performance superiore sotto carico, e si integra meglio con moderne architetture (container, load balancer, auto-scaling). Se stai ancora con mod_php, una migrazione a PHP-FPM è un investimento in sicurezza che vale il tempo speso.

Continua a leggere

Hai un progetto in mente?

Raccontami cosa ti serve: ti propongo la soluzione web più adatta alle tue esigenze.

Contattami I miei servizi