Progetto

Generale

Profilo

Apache-modphp-to-phpfpm » Cronologia » Versione 8

Simone Piccardi, 22-05-2024 09:37

1 1 Simone Piccardi
h1. Migrare Apache da mod_php a php-fpm
2
3 8 Simone Piccardi
Per molti anni il supporto del server web Apache per l'esecuzione di applicazioni web basate su PHP è stato basato su un modulo di estensione, @mod_php@, che consente ad Apache di eseguire direttamente il codice. Il modulo però aveva come limitazione principale quella della necessità di usare la versione tradizionale di Apache a processi singoli (il cosiddetto MPM prefork), e non la nuova versione multi-tread più efficiente e veloce (con il cosiddetto MPM event). Con le versioni più recenti di PHP però la modalità consigliata per l'esecuzione di applicazioni web è divenuta quella di FPM (FastCGI Process Manager); vederemo in questo articolo come passare ad utilizzarla.
4 1 Simone Piccardi
5 8 Simone Piccardi
Nelle seguenti istruzioni faremo riferimento ad una installazione effettuata su una distribuzione Debian o derivata, i passaggi concettuali sono comunque gli stessi anche per altre distribuzioni, ma possono mancare alcune automazioni che Debian fornisce con la sua installazione di Apache. Il supporto tradizionale per PHP è fornito dal pacchetto @libapache2-mod-php@, mentre quello di FPM dal pacchetto @php-fpm@. Si tratterà di passare dall'uno all'altro e di riconfigurare Apache per passare dall'MPM prefork all'MPM event, che fornisce una lunga serie di vantaggi, fra cui il più rilevante è la possibilità di abilitare il supporto per l'uso di HTTP/2, la nuova versione del protocollo HTTP che consente un grosso aumento delle prestazioni.
6 1 Simone Piccardi
7 6 Simone Piccardi
Il primo passo per eseguire PHP con FPM consiste semplicemente nell'installare il pacchetto @php-fpm@ con @apt install php-fpm@, che installerà il programma per la versione specifica di PHP in uso nella propria distribuzione:  ad esempio su Debian 12, la attuale @stable@, verrà messo in esecuzione il servizio @php8.2-fpm@; tutte le nuove configurazioni che si applicano a questo servizio verranno collocate nella corrispondente directory @/etc/php/8.2/fpm/@. 
8 1 Simone Piccardi
9 8 Simone Piccardi
Su Debian e derivate infatti vengono mantenute in directory separate le configurazioni relative all'esecuzione dei programmi PHP, suddividendole sotto @/etc/php/@ per numero di versione di PHP installata (vengono infatti supportate anche più versioni di PHP in contemporanea). Inoltre viene usata una ulteriore sottodirectory per poter configurare separatamente le diverse modalità con cui si eseguono i programmi: @apache@ per quelli eseguiti con @mod_php@, @cli@ per l'esecuzione a riga di comando, ed appunto @fpm@ per l'esecuzione con FPM.
10 1 Simone Piccardi
11 4 Simone Piccardi
Pertanto, se si sta usando la modalità tradizionale di @mod_php@ sarà necessario replicare la configurazione per @php-fpm@; allora, se come è sempre opportuno fare per mantenere pulita la configurazione, si sono aggiunte le modifiche ai parametri di PHP su un file ad hoc in @/etc/php/8.2/apache/conf.d@ (ad esempio @99-local.ini@), evitando modifiche ai default di @php.ini@, tutto quello che sarà necessario fare è: 
12 3 Simone Piccardi
13 1 Simone Piccardi
<pre>
14 4 Simone Piccardi
cp -a /etc/php/8.2/apache2/conf.d/99-local.ini /etc/php/8.2/fpm/conf.d/
15 1 Simone Piccardi
</pre>
16
17 8 Simone Piccardi
altrimenti si dovranno trovare le modifiche effettuate  su @php.ini@ e riapplicarle (e potrebbe essere l'occasione per metterle da sole nel file indicato). Si esegua infine:
18 1 Simone Piccardi
19 2 Simone Piccardi
<pre>
20 4 Simone Piccardi
systemctl restart php8.2-fpm.service
21 2 Simone Piccardi
</pre>
22
23 8 Simone Piccardi
per fare prendere al servizio le modifiche ai parametri.
24 2 Simone Piccardi
25 8 Simone Piccardi
A questo punto per effettuare il passaggio si dovrà disinstallare @libapache2-mod-php@ e procedere con la riconfigurazione di Apache per l'uso di @php-fpm@ al suo posto. Questo, grazie alla ottima pacchettizzazione di Debian che fornisce un sistema per la gestione di moduli e frammenti di configurazione ed installa con il pacchetto di @php-fpm@ una adeguata configurazione in @/etc/apache2/conf-available/php8.2-fpm.conf@, si fa semplicemente eseguendo i seguenti comandi:
26 1 Simone Piccardi
27
<pre>
28 6 Simone Piccardi
apt-get remove --purge libapache2-mod-php8.2
29 1 Simone Piccardi
a2dismod mpm_prefork
30
a2enmod mpm_event
31 7 Simone Piccardi
a2enmod proxy_fcgi setenvif http2
32 6 Simone Piccardi
a2enconf php8.2-fpm
33 1 Simone Piccardi
systemctl restart apache2
34
</pre>
35
36 8 Simone Piccardi
e non c'è bisogno di toccare nulla nella configurazione degli eventuali virtual host presenti.
37 1 Simone Piccardi
38 8 Simone Piccardi
Una volta cambiata la configurazione si potrà verificarne il funzionamento controllando l'uso di HTTP/2. Per questo è sufficiente andare su una qualunque pagina servita da Apache, attivando gli strumenti di sviluppo web di Firefox (o gli analoghi di altro browser); ricaricando la pagina si potrà verificare che le richieste e le risposte utilizzano la versione HTTP/2 del protocollo.