Installation et configuration de php-fpm (CentOS 7.2)

Je pars du principe que nous avons un serveur web (Apache avec virtualhost et PHP) fonctionnel. Si ce n’est pas le cas vous pouvez suivre la documentation que j’ai écrite et que vous trouverez respectivement ici, et la.

Installation de php-fpm

Maintenant que nous avons un serveur web fonctionnel, nous allons pouvoir installer php-fpm. Pour cela nous allons taper la commande suivante :

1
# yum install php-fpm

Activation de php-fpm dans php :

Avant de modifier la configuration et comme à chaque fois nous allons la sauvegarder. Pour cela nous allons taper la commande suivante :

1
# cp /etc/httpd/conf.d/php.conf{,.ori}

Nous allons activer php-fpm dans php. Pour cela nous allons éditer le fichier « php.conf » via la commande suivante :

1
# vi /etc/httpd/conf.d/php.conf

On modifie le fichier comme suit :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#
# Cause the PHP interpreter to handle files with a .php extension.
#
<FilesMatch \.php>
    #SetHandler application/x-httpd-php
    SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

#
# Allow php to handle Multiviews
#
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory indexes.
#
DirectoryIndex index.php

#
# Uncomment the following lines to allow PHP to pretty-print .phps
# files as PHP source code:
#
#<FilesMatch \.phps$>
#    SetHandler application/x-httpd-php-source
#</FilesMatch>

#
# Apache specific PHP configuration options
# those can be override in each configured vhost
#
#php_value session.save_handler "files"
#php_value session.save_path "/var/lib/php/session"

Résumé des modifications :

  • Commenter la ligne 5
  • Ajout de la ligne 6
  • Commenter les lignes 31 et 32

Avant de modifier la configuration et comme à chaque fois nous allons la sauvegarder. Pour cela nous allons taper la commande suivante :

1
# cp /etc/php-fpm.d/www.conf{,.ori}

Nous devons avoir autant de « pool » php-fpm que de vhost Apache (sites web). Afin de nous simplifier la configuration, nous allons nous appuyer sur le fichier « www.conf ». Pour cela nous allons renommer ce fichier via la commande suivante :

1
# mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.monsiteweb.fr.conf

On édite le fichier via la commande suivante :

1
# vi /etc/php-fpm.d/www.monsiteweb.fr.conf

On remplace le nom du « pool » comme ci-dessous (ligne 2) :

1
[www.monsiteweb.fr]

Comme nous allons configurer php-fpm pour travail en mode socket, on modifie la directive « listen » comme ci-dessous (ligne 12) :

1
listen = /run/php-fpm/php-php_www.monsiteweb.fr.sock

On va activer et modifier les directives « listen.owner », « listen.group » et « listen.mode » comme ci-dessous (lignes 31 à 33) :

1
2
3
listen.owner = apache
listen.group = apache
listen.mode = 0660

On va modifier le nom du fichier de log pour le site web « www.monsiteweb.fr » comme ci-dessous (ligne 156)  :

1
slowlog = /var/log/php-fpm/www.monsiteweb.fr-slow.log

On va modifier le nom du fichier de log des erreurs pour le site web « www.monsiteweb.fr » comme ci-dessous (ligne 219) :

1
php_admin_value[error_log] = /var/log/php-fpm/www.monsiteweb.fr-error.log

Afin d’utiliser php-fpm avec Apache, nous devons modifier le Multi-Processing Modules (MPM) configurer par défaut. Avant cela nous allons sauvegarder le fichier de configuration via la commande suivante :

1
# cp /etc/httpd/conf.modules.d/00-mpm.conf{,.ori}

Maintenant on édite le fichier via la commande suivante :

1
# vi /etc/httpd/conf.modules.d/00-mpm.conf

On modifie le fichier comme suit pour activer MPM event :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so

Résumé des modifications :

  • Commenter la ligne 6
  • Décommenter la ligne 18

Maintenant nous devons désactiver l’ensemble des modules proxy à l’exception de « mod-proxy » et mod_proxy_fcgi ». Avant cela, nous allons sauvegarder le fichier de configuration via la commande suivante :

1
# cp /etc/httpd/conf.modules.d/00-proxy.conf{,.ori}

On édite le fichier via la commande suivante :

1
# vi /etc/httpd/conf.modules.d/00-proxy.conf

On modifie le fichier comme ci-dessous :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

Résumé des modifications :

  • Commenter les lignes3 à 10 et de 12 à 16

Nous avons fini de configurer php-fpm, nous devons maintenant l’activer dans la configuration du vhost Apache « monsiteweb.fr.conf ». Pour cela, on édite son fichier de configuration via la commande suivante :

1
# vi /etc/httpd/conf.d/monsiteweb.fr.conf

On modifie le fichier comme ci-dessous :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<VirtualHost *:80>
     ServerAdmin postsmaster@moniteweb.fr
     ServerName www.monsiteweb.fr
     DocumentRoot /var/www/html/monsiteweb.fr/
     <Directory /var/www/html/monsiteweb.fr/>
          Options -Indexes +FollowSymLinks +MultiViews
          AllowOverride All
     </Directory>
     <FilesMatch \.php$>
	    SetHandler "proxy:unix:/run/php-fpm/php-fpm_monsiteweb.sock|fcgi://127.0.0.1"
     </FilesMatch>
     ErrorLog /var/log/httpd/monsiteweb.fr/error.log
     CustomLog /var/log/httpd/monsiteweb.fr/access.log combined
     ServerSignature Off
</VirtualHost>

On vérifie qu’il n’y a pas de coquille dans la configuration via la commande suivante :

1
# apache configtest

Maintenant que tout est bon. On active php-fpm au démarrage et on démarre/redémarre les services :

1
2
3
# systemctl enable php-fpm.service
# systemctl start php-fpm.service
# systemctl restart httpd.service