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

@Cascador

Les liens que tu mets sont pour Debian. Attention, mon tuto porte pour des distributions Fedora, centOS et Red Hat.

Lol oui tu te doutes bien que j’avais vu, c’est pour ça que j’ai ajouté les compléments.

Tcho !

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)