Apache fonctionnait lentement en production. Après avoir cherché des réponses pendant un certain temps, je suis finalement allé sur le canal IRC #apache et les pros m'ont fait vérifier le mode apache avec cette commande:
sudo apachectl -V
et ont été alarmés de constater que le serveur MPM est préfork . Ils ont catégoriquement déclaré NE PAS UTILISER PREFORK SUR UN SERVEUR DE PRODUCTION. En fait, les paquets Ubuntu (vraisemblablement hérités de Debian?) Insistent pour exécuter apache en mode préfork malgré le fait que la méthode recommandée pour exécuter PHP avec Apache recommande clairement proxy_fcgi et php-fpm, puis fcgid et finalement vous ne devriez pas utiliser la pré-fourche:
Pourquoi vous ne devriez plus utiliser mod_php avec la préfork mpm
- mod_php est chargé dans chaque processus httpd tout le temps. Même lorsque httpd sert du contenu statique / non php, cette mémoire est utilisée.
- mod_php n'est pas sûr pour les threads et vous oblige à vous en tenir à la préfork mpm (multi processus, pas de threads), qui est la configuration la plus lente possible
Cette page contient également quelques détails sur PHP-FPM mais cela semble un peu élaboré et peu clair et semble impliquer beaucoup de configuration manuelle. Je suis déçu et surpris qu'Ubuntu 16 n'ait pas d'option de package pour le mode fastCGI ou quelque chose.
J'ai essayé de basculer apache en mode événement en utilisant a2enmod et lorsque j'ai essayé de lancer apache back up, j'ai eu une erreur:
Apache exécute un MPM threadé, mais votre module PHP n'est pas compilé pour être threadsafe. Vous devez recompiler PHP
En tout cas, je me demandais si quelqu'un avait des instructions minimales et pas à pas pour faire fonctionner le mode fastCGI sur Ubuntu 16 avec PHP 7.0 en s'appuyant autant que possible sur les installateurs de packages. Je regarde actuellement beaucoup d'instructions vagues et mal expliquées et je crains que mon environnement de production ne prenne de mauvaises décisions.
De plus, quelqu'un devrait ajouter mpm-event comme option de balise. C'est ce que les gars de l'IRC #apache ont recommandé.
Réponses:
ezra-s suggère une bonne approche mais elle n'inclut pas certains détails qui pourraient être déroutants pour les personnes qui comptent sur les gestionnaires de paquets. REMARQUE : je ne sais pas si ces étapes sont exactes. Si quelqu'un rencontre des problèmes ou voit des problèmes, faites-le moi savoir et je mettrai à jour ce message.
Premièrement, au moment d'écrire ces lignes, les paquets apache2 d'Ubuntu insistent sur la préfork si vous souhaitez installer PHP. Ne désespérez pas, cependant, car vous pouvez toujours utiliser les installateurs de packages pour installer et mettre à jour PHP et apache2 et toujours faire fonctionner votre configuration avec Apache en mode événement en utilisant PHP-FPM comme recommandé par le wiki Apache et décrit plus en détail dans High- performance PHP sur apache httpd 2.4.x en utilisant mod_proxy_fcgi et php-fpm . L'idée de base est qu'apache2 et PHP-FPM communiquent via socket plutôt que PHP fonctionnant en tant que module Apache.
1) Supprimer ou désactiver le module PHP Apache
Parce que les packages Ubuntu insistent sur la préfork Apache lors de l'installation de PHP, nous devons les séparer. J'ai fait cela en utilisant apt pour désinstaller libapache2-mod-php7.0 car je n'ai plus besoin du paquet:
Alternativement, vous pouvez désactiver le module Apache php7.0 à la place, mais cela ne supprimera pas le package apt de votre système, ce qui laissera la corruption du système ennuyeuse.
2) Basculez Apache en mode événement et activez fcgid
Je crois que ces commandes devraient faire l'affaire:
3) Installez PHP-FPM
J'ai déjà PHP 7 installé avec ses différents modules, donc j'installe juste PHP-FPM avec cette commande:
4) Modifiez votre configuration VirtualHost pour gérer les fichiers PHP avec PHP-FPM:
Dans mon cas, j'ai modifié l'hôte SSL par défaut, /etc/apache2/sites-available/default-ssl.conf , et j'ai ajouté cette ligne juste en haut:
IMPORTANT Ceci indique à Apache de gérer les demandes de fichiers PHP avec PHP-FPRM et le chemin dans cette directive ( /run/php/php7.0-fpm.sock ) doit correspondre au chemin spécifié par la directive listen dans le fichier / etc / php /7.0/fpm/pool.d/www.conf
5) Redémarrez Apache
Pour vérifier si le mode événement est activé, utilisez cette commande:
Dans la sortie, vous devriez voir ceci:
Essayez de créer une page phpinfo et d'y accéder dans votre navigateur. Vous devriez voir
Server API: FPM/FastCGI
dans la sortie.la source
a2enconf /etc/apache2/conf-available/php7.3-fpm.conf; systemctl reload apache
et lorsque j'ai créé un fichier phpinfo.php avec l'<?php phpinfo();
intérieur, la ligne API du serveur indique FPM / FastCGI. BTW, j'ai installé php7.3 car au moment de la rédaction de cet article, on devrait au moins être sur cette version, sinon supérieure, et les référentiels apt Ubuntu pour Ubuntu Server 19.10 vont jusqu'à php7.3 actuellement.Les discothèques proposent la méthode "mod_php" pour plus de commodité.
Alors que le moyen le plus performant est apache w / event + mod_proxy_fcgi -> php-fpm.
Peut-être devraient-ils évoluer avec le temps, mais c'est difficile pour eux quand tant de frameworks sont livrés avec des configurations .htaccess mod_php dans une sorte de mode "plug & play". À la fin, c'est l'administrateur qui est le seul responsable de l'administration et de la configuration de leur site correctement.
Si vous êtes en production, je vous suggère d'utiliser un serveur de test pour pratiquer la mise à niveau et les modifications.
À propos du wiki, je préfère ou vous suggérerais la méthode du "gestionnaire". https://wiki.apache.org/httpd/PHP-FPM#Proxy_via_handler .
Autrement dit, configurez php-fpm pour avoir un socket prêt et avec suffisamment d'autorisations pour que l'utilisateur Apache puisse lui envoyer des requêtes et configurer Apache pour l'utiliser.
Un exemple rapide:
Éditer:
De cette façon, peu importe la version PHP que vous utilisez car Apache s'en fiche, il inversera simplement les requêtes appropriées vers php-fpm.
N'oubliez pas non plus de décharger mod_php pour pouvoir utiliser mpm_event.
Modifier 2:
Selon la demande, vous n'avez pas besoin de désinstaller les paquets mod_php de debian / ubuntu, Apache ne se soucie que de sa configuration, donc le déchargement du module fera l'affaire.
la source