Archives de catégorie : PHP-FPM

Php-fpm

useradd site -s /bin/false -d /var/www/site
[site.fr]
user = site
group = www-data
listen = /run/php/php-fpm-site.sock
listen.owner = site
listen.group = www-data
pm = ondemand
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Taille maximale upload fichier

/etc/php5/fpm/php.ini

php_value upload_max_filesize 20M
php_value post_max_size 20M

Dans le vhost

client_max_body_size 20M;
client_body_buffer_size 128k;

optimisation multivhosting

L’idée est de rendre disponible la ram qui est saturée très rapidement par les processus php-fpm. En effet, les processus php ne rendent pas la mémoire qui s’allouent au fur et à mesure.

les paramètres suivant contrôle la relance des processus de leur échec après la réception de 3 Segmentation, page fault ou access violation (SIGSEGV ou SIGBUS) et il attendra 1 minute pour faire un graceful restart .

cette valeur peut être tunnée si la consommation processeur devient trop importante pendant les périodes de charges.

process_control_timeout est le de seconde qu’attends un processus fils pour les signaux venant du master.

dans /etc/php5/fpm/php-fpm.conf

emergency_restart_threshold = 3
emergency_restart_interval = 1m ( 5m )  //ceci est un workaround pour les problème de plugins ( wp better security ) qui font nimp avec le cache et tole les process php.
process_control_timeout = 5s

dans /etc/php5/pfm/pool.d/ passage a ondemand au lieu de dynamic

sed -i -e s/dynamic/ondemand/ig *

relance de la couche php

/etc.init.d/php-fpm restart

Ainsi une coket php5-fpm ne sera ouverte que si le site est utilisé. Economisant ainsi drastiquement la RAM.

Sécurisation

Dans le fichier /etc/php5/fpm/php.ini :

  expose_php = Off
  date.timezone = Europe/Paris

Affiche la configuration php

php -c /etc/php5/apache2/php.ini -i |grep -i opcache

Il faut l’adapter au niveau du grep -i suivant la configuration recherchée

Tracing de processus

Afin de connaitre l’état des sous processus php-fpm on peut strace comme suit

strace -p 30772
Process 30772 attached - interrupt to quit
futex(0x7f562602ae40, FUTEX_WAIT_PRIVATE, 2, NULL

Le futex wait indique un état bloqué , généralement en attente d’un accès fichier. on peut kill le processus et réattaché directement le strace dessus pour voir le déroulement ou la boucle afin d’indentifier le fichier qui pose problème. parmis les problème fréquent : fichier de cache wp qui n’existe plus et qui essaie d’être lsstat par php ou boucle infinie sur un fichier php upload avec un méta caratère.

Fonctions dangereuses

Fonction php potentiellement dangereuses

grep -RPn "(passthru|shell_exec|system|base64_decode|fopen|fclose|eval)" /var/www/

Connaitre l’empreinte mémoire u’un process php-fpm

service php7.0-fpm start && ps --no-headers -o "rss,cmd" -C php-fpm7.0 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

Changement de version

update-alternatives –set php /usr/bin/php7.3