Comment configurer Apache et PHP pour des sites Web à fort trafic sur un serveur Linux

Apache Php Fpm Featured

Quasiment tous les tutoriels sur la façon d’installer la pile LAMP (Linux, Apache, MySQL, PHP) recommandent d’utiliser le module Apache intégré pour traiter les scripts PHP. Par exemple, sur Ubuntu, vous activeriez cela lorsque vous utilisez une commande telle que sudo apt install libapache2-mod-php pour installer un package. Cela obligerait à son tour Apache à utiliser mpm_prefork. Chaque fois qu’un visiteur accède à votre site Web, un nouveau processus sera lancé pour gérer cette connexion. Cela fonctionne bien lorsque le trafic est faible.

Mais cela devient un énorme problème si vous recevez une brusque montée de trafic. Par exemple, un post Reddit peut inclure votre site, et si le post devient populaire, vous pouvez avoir des milliers de visiteurs en quelques minutes.

Dans un scénario idéal, si Apache est capable de gérer la montée de trafic, certains visiteurs malchanceux devront peut-être attendre trente à soixante secondes avant que la page ne soit chargée, ce qui est absurde dans le monde d’aujourd’hui. Dans le pire des cas, le serveur commencera à ralentir gravement, et certaines connexions seront tout simplement abandonnées par manque de ressources. Dans ce cas, les visiteurs verront une erreur dans leurs navigateurs.

Ce n’est pas un bon scénario dans tous les cas, car vous avez potentiellement perdu l’attention de centaines ou de milliers de lecteurs, clients ou fans intéressés.

Malheureusement, PHP est un énorme consommateur de ressources de toute façon. Mais, avec mpm_event, Apache peut gérer les brusques montées de trafic de manière beaucoup plus efficace. Il est toutefois recommandé que votre serveur ait au moins 2 Go de RAM et 2 cœurs de CPU, réels ou virtuels, et même plus si vous vous attendez à des pics de trafic intenses, tels que plus de dix visiteurs par seconde. Si vous utilisez un serveur privé virtuel, ajoutez plus de cœurs de CPU virtuels à votre situation et du stockage SSD. La RAM est secondaire.

À lire aussi : Nginx vs Apache : Lequel vous sert le mieux ?

Comment utiliser Apache MPM Event et PHP-FPM sur les distributions basées sur Debian

Sur Debian, Ubuntu ou d’autres distributions de cette famille, évitez simplement d’installer le package “libapache2-mod-php”. Lorsque vous installez Apache, il utilise MPM event par défaut. Mais lors de l’installation du package mentionné, un script désactive MPM event et active MPM prefork. Le module PHP d’Apache ne peut fonctionner (sûrement) qu’avec mpm_prefork. Bien sûr, sans “libapache2-mod-php”, vous n’avez pas de processeur pour les fichiers PHP. Vous utiliserez donc PHP-FPM à la place du module PHP inclus dans Apache. Voici comment vous installeriez une pile LAMP sur un serveur frais. Vous pouvez adapter les étapes en fonction des exigences de votre application Web.

Tout d’abord, connectez-vous en tant que root. Ensuite, installez Apache.

apt update && apt install apache2

À ce stade, vous pouvez voir qu’Apache est en effet livré avec MPM event activé par défaut.

apachectl-V

Apache Php Fpm Check Mpm Debian

Installez PHP-FPM.

apt install php-fpm

Vous verrez des instructions sur la façon d’activer le processeur PHP dans Apache.

Apache Php Fpm Enable Php Instructions

Activez le protocole FastCGI.

a2enmod proxy_fcgi

Activez la configuration par défaut de PHP-FPM pour Apache.

a2enconf php7.0-fpm

Remarque : dans les futures versions de Debian/Ubuntu, cette commande pourrait changer pour quelque chose d’autre, par exemple a2enconf php7.6-fpm, car PHP-FPM serait d’une version différente.

Redémarrez Apache.

systemctl restart apache2

Installez le reste de vos exigences pour votre application PHP. Voici un exemple :

apt install mariadb-server php-mysql

Cela installerait un serveur de base de données et le module PHP MySQL afin que votre application PHP puisse se connecter à une base de données.

À lire aussi : Comment se protéger contre les DDoS avec Mod_evasive sur le serveur Apache

Comment utiliser Apache MPM Event et PHP-FPM sur les distributions basées sur RedHat

L’autre choix de distribution serveur populaire est RedHat ou CentOS. De la même manière que ci-dessus, un exemple d’une installation propre d’Apache avec MPM event activé et PHP-FPM sera proposé.

Connectez-vous en tant que root et installez Apache.

yum install httpd

Contrairement aux distributions basées sur Debian, ici vous verrez qu’Apache utilise MPM prefork par défaut, du moins sur le dernier CentOS 7 disponible au moment de l’écriture.

apachectl-V

Apache Php Fpm Check Mpm Centos

Pour activer MPM event, vous devez modifier un fichier de configuration.

sed-i'/mpm_prefork\.so$/s/^/#/'/etc/httpd/conf.modules.d/00-mpm.conf

Cela ajoutera un signe # pour commenter (inactiver) la ligne LoadModule mpm_prefork_module modules/mod_mpm_prefork.so.

Apache Php Fpm Mpm Conffile On Centos

Maintenant, décommentez (activez) la ligne #LoadModule mpm_event_module modules/mod_mpm_event.so en supprimant le signe # précédent avec la commande suivante.

sed-i'/mpm_event\.so$/s/^#//'/etc/httpd/conf.modules.d/00-mpm.conf

Démarrez Apache et activez-le pour qu’il se lance automatiquement au démarrage.

systemctl start httpd.service  
systemctl enable httpd.service

Vérifiez si Apache utilise maintenant MPM event.

apachectl-V

Apache Php Fpm Mpm Event Enabled Status Centos

Installez PHP-FPM et le module FastCGI.

yum install php-fpm mod_fcgid

Créez “/etc/httpd/conf.d/php.conf” pour indiquer à Apache comment traiter les fichiers PHP. Copiez TOUT le contenu ci-dessous, et collez-le d’un coup dans le terminal, puis appuyez sur ENTRER.

cat</etc/httpd/conf.d/php.conf  
# Rediriger vers local php-fpm si mod_php n'est pas disponible  
  
  
# Activer les en-têtes d'autorisation http  
  
SetEnvIfNoCase ^Authorization$ "(.+)"HTTP_AUTHORIZATION=$1  
IfModule>  
  
  
#SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"  
SetHandler "proxy:fcgi://127.0.0.1:9000"  
FilesMatch>  
  
# Refuser l'accès aux sources php brutes par défaut  
# Pour réactiver, il est recommandé d'activer l'accès aux fichiers  
# seulement dans un hôte virtuel ou un répertoire spécifique  
Require all denied  
FilesMatch>  
# Refuser l'accès aux fichiers sans nom de fichier (par exemple, '.php')  
  
Require all denied  
FilesMatch>  
IfModule>  
IfModule>  
PASTE

Le crédit pour cette excellente configuration revient à Debian. D’autres sources recommandent un fichier de configuration simple tel que :


SetHandler "proxy:fcgi://127.0.0.1:9000"

Mais cela est vulnérable à certaines attaques, et si certains services échouent, vous pouvez exposer des fichiers PHP au public, exposant ainsi potentiellement des mots de passe stockés, du code et des données sensibles.

Redémarrez Apache.

systemctl restart httpd.service

Démarrez PHP-FPM et activez son démarrage automatique au démarrage.

systemctl start php-fpm.service  
systemctl enable php-fpm.service

Conclusion

Vous avez maintenant un serveur Apache qui évolue beaucoup mieux avec le trafic. Cependant, rappelez-vous que vous utilisez les paramètres par défaut, ce qui est “le mieux” pour la plupart des gens. Si vous voulez vraiment tirer le meilleur parti de votre serveur HTTP, vous devez lire sur les différentes variables que vous pouvez régler. Les bonnes valeurs pour celles-ci dépendent fortement des ressources de votre serveur, du trafic attendu et de l’application PHP.