doc:appunti:linux:sa:apache_php_optimization
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
doc:appunti:linux:sa:apache_php_optimization [2025/02/28 12:24] – [Web Resources] niccolo | doc:appunti:linux:sa:apache_php_optimization [2025/03/31 10:42] (current) – [Metodo chroot] niccolo | ||
---|---|---|---|
Line 9: | Line 9: | ||
I moduli disponibili installati dal pacchetto **apache2** sono **event**, **prefork** e **worker**. | I moduli disponibili installati dal pacchetto **apache2** sono **event**, **prefork** e **worker**. | ||
+ | |||
+ | Per una configurazione Apache + PHP-FPM, il modulo MPM event è la scelta preferita. Offre migliori prestazioni, | ||
===== Modulo MPM prefork e mod-php ===== | ===== Modulo MPM prefork e mod-php ===== | ||
Line 31: | Line 33: | ||
</ | </ | ||
- | ===== Modulo MPM (quale?), proxy_fcgi e php-fpm ===== | + | ===== Modulo MPM event, proxy_fcgi e php-fpm ===== |
- | + | ||
- | FIXME Quale modulo MPM usare? event oppure worker? | + | |
Secono le **[[https:// | Secono le **[[https:// | ||
Line 73: | Line 73: | ||
systemctl status php8.2-fpm | systemctl status php8.2-fpm | ||
</ | </ | ||
+ | |||
+ | Infine si cambia il modulo MPM da prefork a event: | ||
+ | |||
+ | < | ||
+ | a2dismod mpm_prefork | ||
+ | a2enmod mpm_event | ||
+ | systemctl restart apache2.service | ||
+ | </ | ||
+ | |||
+ | Controllare che le pagine PHP siano correttamente interpretate e che il modulo MPM event sia effettivamente in uso: | ||
+ | |||
+ | < | ||
+ | apachectl -V | grep ' | ||
+ | Server MPM: event | ||
+ | </ | ||
+ | |||
=== Altri moduli Apache consigliati === | === Altri moduli Apache consigliati === | ||
Line 149: | Line 165: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | ===== Segregazione VirtualHost ===== | ||
+ | |||
+ | Su un host che ospita più di un VirtualHost potrebbe essere desiderabile isolare il PHP di un VirtualHost dai file degli altri VirtualHost ed anche dai file dell' | ||
+ | |||
+ | Essenzialmente si può agire con un **chroot** per processo PHP oppure con la direttiva **open_basedir** del PHP. | ||
+ | |||
+ | Il primo metodo è quello formalmente più corretto e sicuro, in quanto il processo PHP sarebbe effettivamente in esecuzione in un ambiente chroot e sarebbe il sistema operativo stesso a impedirgli di accedere fuori dalla propria DocumentRoot. Tuttavia questo metodo comporta **notevoli problemi** perché ad esempio impedisce l' | ||
+ | |||
+ | Il metodo che utilizza la direttiva **open_basedir** invece è più flessibile, ma affida la sicurezza all' | ||
+ | |||
+ | ==== Metodo chroot ==== | ||
+ | |||
+ | Supponiamo che la DocumentRoot di un sito sia **/ | ||
+ | |||
+ | < | ||
+ | [site.example.org] | ||
+ | user = site-example-org | ||
+ | group = site-example-org | ||
+ | |||
+ | ; This PHP-FPM instance is chrooted. | ||
+ | chroot = / | ||
+ | chdir = /www | ||
+ | ; Values set here with php_admin_value belong to this pool only. | ||
+ | ; doc_root: (without chroot would be empty or the Apache DocumentRoot). | ||
+ | php_admin_value[doc_root] = /www | ||
+ | ; cgi.fix_pathinfo: | ||
+ | ; See https:// | ||
+ | php_admin_value[cgi.fix_pathinfo] = 0 | ||
+ | </ | ||
+ | |||
+ | In questo modo si ha un processo **php-fpm** che gira con le credenziali di //user// e //group// indicate e che è chrooted nella directory indicata. | ||
+ | |||
+ | Purtroppo questa soluzione impedisce il corretto funzionamento delle librerie PHP, ad esempio il pacchetto **php-mail** installa i propri file in **/ | ||
+ | |||
+ | Vedere la discussione **[[https:// | ||
+ | |||
+ | ==== Metodo open_basedir ==== | ||
+ | |||
+ | Con la direttiva PHP **open_basedir** si pone un limite a tutte le funzioni PHP che aprono file dal filesystem (ad esempio '' | ||
+ | |||
+ | Ecco quindi come configurare l' | ||
+ | |||
+ | < | ||
+ | [site.example.org] | ||
+ | user = site-example-org | ||
+ | group = site-example-org | ||
+ | php_admin_value[open_basedir] = / | ||
+ | </ | ||
+ | |||
+ | Come si vede è necessario avere l' | ||
===== Web Resources ===== | ===== Web Resources ===== |
doc/appunti/linux/sa/apache_php_optimization.1740741848.txt.gz · Last modified: 2025/02/28 12:24 by niccolo