Abandon de Nginx pour Apache et PHP-FPM

Abandon de Nginx pour Apache et PHP-FPMJ’ai mis en production Nginx depuis plusieurs mois et l’essai, à vrai dire, est peu concluant. Complexité de la configuration, complication à mettre en place Awstats, pas de .htaccess, modules à compiler du fait de leur indisponibilité, plantages intempestifs inexpliqués … Du coup, j’ai décidé de revenir à ce bon vieux Apache, plus riche, plus simple.

Voici un tuto pour implémenter Apache MPM Event associé au PHP-FPM sur les distributions Fedora / CentOS / Red Hat !

Apache en mode PHP-FPM

Le principal intérêt de Nginx est d’utiliser le PHP en mode CGI, en s’appuyant sur PHP-FPM (PHP FastCGI Process Manager). Vous pouvez en faire de même sur un serveur Apache.

Installation de PHP-FPM

Sous Linux Fedora 23, vous devez tout d’abord installer le package PHP-FPM :

dnf install php-fpm
Configuration de PHP-FPM

Vous pouvez indifféremment utiliser le PHP-FPM en mode socket ou en application Tcp/Ip. Dans le cas d’un gestion multi-sites, vous devez créer un fichier de pool par site, de préférence, sur la base du fichier /etc/php-fpm.d/www.conf. Dans le fichier d’exemple ci-dessous, j’ai choisi le mode socket !

;Remplacez www par le nom de votre site
[srv2]
user = apache
group = apache
#En mode socket
listen = /run/php-fpm/srv2.sock
#En mode application Tcp/Ip
#listen = 127.0.0.1:9000
listen.owner = apache
listen.group = apache
listen.acl_users = apache
listen.acl_groups = apache
listen.allowed_clients = 127.0.0.1
Les modules Apache

Au niveau de la gestion des processus, je vous recommande chaudement d’utiliser le module multi-processus Event, parfaitement adapté pour la montée en charge de vos serveurs Apache. Il suffit de modifier le fichier /etc/httpd/conf.modules.d/00-mpm.conf comme suit :

#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so

La 2e chose à faire, afin d’éviter les conflits, est de désactiver tous les modules du fichier /etc/httpd/conf.modules.d/00-proxy.conf qui ne sont pas nécessaires :

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
Configuration du VirtualHost

Dans la configuration du VirtualHost (les fichiers de configuration sont à ajouter au dossier /etc/httpd/conf.d/),  vous devez ajouter les directives correspondant au mode socket ou application Tcp/Ip. Dans l’exemple ci-dessous, le VirtualHost est configuré  en mode socket !

<VirtualHost *:80>
    DocumentRoot "/home/www"
    ServerAdmin dszalkowski@gmail.com
    ServerName 195.154.102.202:80
    ServerAlias 2001:bc8:34b7:200::
    ErrorLog logs/srv2-error_log
    CustomLog logs/srv2-access_log combined env=!dontlog
    #En mode socket
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php-fpm/srv2.sock|fcgi://127.0.0.1"
    </FilesMatch>
    #En mode application Tcp/Ip
    #ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/www/$1
</VirtualHost>

LAMP  / .htaccess Apache Awstats Fedora Formateur Apache Formateur Awstats Formateur Fedora Formateur Linux Formateur Nginx Linux nginx php PHP-FPM 

Commentaires

Hello,

J’ai cherché à mettre en place le mod_event sur une machine CentOS 7.2 (avec les software collections), le truc c’est que depuis qu’il est activé, la consommation de RAM a tout simplement explosé, et les I/O aussi puisque ça fait bosser le swap !

Je n’avais pas de configuration par défaut pour le nombre de threads, j’en ai ajouté une, ça rallonge le temps de remplissage de mémoire mais c’est toujours pas ça.

Comment peut-on s’assurer qu’il ne fera pas sauter la baraque ?

Laisser un commentaire

(requis)

(requis)