diff --git a/HowtoPHPFPM.md b/HowtoPHPFPM.md index 8de775ec..b99b0667 100644 --- a/HowtoPHPFPM.md +++ b/HowtoPHPFPM.md @@ -22,7 +22,7 @@ pid = /run/php5-fpm.pid error_log = /var/log/php5-fpm.log ~~~ -On définit ensuite un ou plusieurs "pools" FPM via /etc/php5/fpm/pool.d/*.conf : +On définit ensuite un ou plusieurs *pools* FPM via `/etc/php5/fpm/pool.d/*.conf` : ~~~ [www] @@ -31,23 +31,60 @@ listen = /var/run/php5-fpm.sock user = www-data group = www-data pm = dynamic -pm.max_children = 50 -pm.start_servers = 20 -pm.min_spare_servers = 5 -pm.max_spare_servers = 35 -pm.max_requests = 0 + +php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f return-path@example.com +php_flag[display_errors] = off +php_admin_value[error_log] = /var/log/fpm-php.www.log +php_admin_flag[log_errors] = on +php_admin_value[memory_limit] = 32M ~~~ +## Configuration avancée + +L'option **pm** (process manager) permet de choisir comment seront contrôlés les process fils : static, ondemand ou dynamic. + +Le mode standard est **dynamic** : FPM va préparer des process en attente (au minimum 1) et les faire varier en fonction de la demande (de façon similaire à ce que peut faire [Apache](HowtoApache#configuration-de-base)). + +~~~ +pm = dynamic +pm.max_children = 100 +pm.start_servers = 50 +pm.min_spare_servers = 20 +pm.max_spare_servers = 30 +pm.max_requests = 100 +~~~ + +Avec de nombreux pools, on optera pour le mode **ondemand** qui ne prépare pas de process mais les crée à chaque demande. D'après nos tests, les performances restent (assez étonnament) tout à fait acceptables. + +~~~ +pm = ondemand +pm.max_children = 100 +pm.process_idle_timeout = 10s +~~~ + +D'autres options de FPM sont intéressantes : + +~~~ +slowlog = log/$pool.log.slow +request_slowlog_timeout = 5s + +pm.status_path = /fpm-status +request_terminate_timeout = 60s +chroot = /home/foo +access.log = log/$pool.access.log +~~~ + + ## Configuration avec Nginx : -On configure maintenant Nginx, par exemple dans un Virtualhost foo : +On configure PHP-FPM avec Nginx, par exemple dans un Virtualhost : ~~~ server { listen 80; server_name www.example.com example.com; root /home/foo/www; - index index.html index.php; + index index.php; location ~ \.php$ { try_files $uri =404; @@ -57,4 +94,21 @@ server { include fastcgi_params; } } -~~~ \ No newline at end of file +~~~ + +## Configuration avec Apache + +~~~ +# a2enmod proxy_fcgi +Considering dependency proxy for proxy_fcgi: +Enabling module proxy. +Enabling module proxy_fcgi. +~~~ + +On configure PHP-FPM avec Apache, par exemple dans un VirtualHost : + +~~~{.apache} +DocumentRoot /home/bench/www/ +#ProxyPassMatch "^/(.*\.php(/.*)?)$" "fcgi://127.0.0.1:9000//home/foo/www/$1" +ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm.sock|fcgi://localhost/home/foo/www/" +~~~