115 lines
2.8 KiB
Markdown
115 lines
2.8 KiB
Markdown
# Howto PHP-FPM
|
|
|
|
PHP-FPM (FastCGI Process Manager) est une façon alternative d'utiliser PHP avec [Apache](HowtoApache) ou [Nginx](HowtoNginx).
|
|
|
|
## Installation
|
|
|
|
~~~
|
|
# apt install php5-fpm
|
|
~~~
|
|
|
|
## Configuration
|
|
|
|
<http://php.net/manual/fr/install.fpm.configuration.php>
|
|
|
|
La configuration de PHP-FPM se trouve dans `/etc/php5/fpm/php-fpm.conf`.
|
|
|
|
Voici les directives de base :
|
|
|
|
~~~
|
|
[global]
|
|
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` :
|
|
|
|
~~~
|
|
[www]
|
|
listen = /var/run/php5-fpm.sock
|
|
;listen = 127.0.0.1:9000
|
|
user = www-data
|
|
group = www-data
|
|
pm = dynamic
|
|
|
|
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 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.php;
|
|
|
|
location ~ \.php$ {
|
|
try_files $uri =404;
|
|
#fastcgi_pass 127.0.0.1:9000;
|
|
fastcgi_pass unix:/var/run/php5-fpm.sock;
|
|
fastcgi_param SCRIPT_FILENAME /home/foo/www$fastcgi_script_name;
|
|
include fastcgi_params;
|
|
}
|
|
}
|
|
~~~
|
|
|
|
## 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/"
|
|
~~~
|