Optimisation Apache2

Tags: #<Tag:0x00007f50a183ce00>

Bonjour a tous !

J’aimerais savoir si certains d’entre-vous connaisse bien les configurations possible d’apache .
En effet j’ai ce soir demander un audit SEO sur https://myrankingmetrics.com et j’ai depuis du mal a accéder a ma plate-forme. Alors qu’au niveau des ressources je suis large !

Capture du 2020-10-06 22-00-28

Seulement la configuration s’arrête pour moi au niveau du choix du Module Multi-Processus (MPM) et quelques options de configuration des Hôtes.

Je souhaiterais lancer une discussion sur le sujet. Une aide serait bien précieuse !

Salut,

Je mets habituellement ceci:

[Code] B1. Modifications du php.ni pour affichage des erreurs, date et PHAR
Nota suivant la distribution Linux le logiciel éditeur de texte mousepad peut être remplacer gedit, geany par ou autre possibilité a votre convenance, le but c’est d’éditer le fichier /etc/php/7.0/apache2/php.ini

mousepad /etc/php/7.3/apache2/php.ini

Par exemple avec le bureau KDE : su kwrite /etc/php/7.3/apache2/php.ini

Commenter cette ligne en ajoutant le point virgule ; devant

;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Ajouter (pour afficher les erreurs d’exécution des scripts et les erreurs E_STRICT)

error_reporting = E_ALL | E_STRICT

Commenter cette ligne en ajoutant le point virgule ; devant

;display_errors = Off

Ajouter (Pour afficher les erreurs à l’écran)

display_errors = On

Rechercher

;date.timezone =

Ajouter (Pour afficher le fuseau horaire de Paris)

date.timezone = Europe/Paris

Rechercher

[Phar]; http://php.net/phar.readonly;phar.readonly = On

Ajouter (Permet la création des archives Phar)

phar.readonly = Off

Puis pour relancer le serveur

service apache2 restart ou systemctl reload apache2

Dans le phpinfo.php error_reporting est passé de 22527 à 32767[/code]

Extrait de cette page: http://jc.etiemble.free.fr/abc/index.php/trucs-astuces/lamp/debian10php73
Mais qu’on retrouve dans d’autres tutos d’installation de la pile lamp.

il me semble pas que ce soit très sécurisé pour un serveur de développement.
Théoriquement on n’affiche pas les erreurs et la signature du serveur. Mais bon pour un serveur de developpement ca passe.

Là ou je ne sais pas trop ou chercher c’est au niveau de l’optimisation des ressources, j’ai ouie dire qu’il fallait faire un calcul précis pour la consommation. Seulement je n’arrive pas a retrouver l’info…

Le truc c’est que j’utilise aussi docker pour l’un des domaine et je sais que cela peut poser quelques problèmes pour l’optimisation. :slight_smile:

Tout d’abord quelques question ?

  • Apache MPM oui mais lequel event, worker, prefork ?
  • PHP ou PHP-fpm ?
  • Qu’entends-tu par j’ai du mal à accéder à ma plateforme ?

à moins que ce soit secret c’est quoi le domaine ? as-tu tous simplement essayer avec https://developers.google.com/speed/pagespeed/insights/

Pour le restant que tu utilise LXC/Docker ou autre peut importe le fonctionnement reste pareil (a peux de chose près).

2 J'aime

Coucou Clochette!

Merci pour toutes tes questions, je n’ai pas eu le temps de trop revenir ici pendant la semaine dernière, je quittait un poste pour un nouveau ce lundi.

Alors en fait, ma plate-forme est sur un apache2 qui utilise mpm_prefork, que je n’ai malheureusement pas trop configurer pour le coup, dans mes souvenir j’avais modifier le nombre de fork en suivant un tuto que je ne retrouve pas dans mes marques pages.

Cependant j’ai un proxypass qui redirige http://besançon25.fr (le domaine en question) sur un docker où tourne une image php:7.3.15-apache-stretch donc techniquement j’ai bien deux apache qui tourne et qui se relayent les requêtes.

Concernant php, l’image docker tourne en mod-php tout comme l’apache qui redirige les requêtes sur docker par le biais du port spécifique. Pas de php-fpm de ce coté là… Je ne sais pas si ça arrangerais les choses…

Pour tout te dire quand j’ai lancé l’outil d’audit de myRankingMetrics, ma plate-forme était inaccessible dans quasiment 100% des cas, ainsi que les autres domaines qui tournait sur l’apache frontal. Cependant comme tu peut le voir sur le graphique plus haut, les ressources n’étaient pas au max de ses capacités. D’où ma question d’optimisation.

Non, non, le domaine n’est pas secret, loin de là, mais il as été codé il y a longtemps et j’ai fait pas mal de modif’ au fur et a mesure du temps dessus. Par contre il assez gourmand en bande passante : je n’ai absolument pas optimiser les css et js que j’utilise dessus, et j’utilise réellement beaucoup de lib différentes. Ceci dit la génération de la page html avec mon architecture php est quand a elle plutôt rapide, voir très rapide.

Là je ne suis pas trop d’accord, ici j’ai un Reverse Proxy qui me renvois les requêtes depuis un apache Frontal. je mettrait ma main a couper que ca joue… bon enfin juste sous un couteau en plastique, faut pas être fou, j’en ai besoin de mes mimimes ! :slight_smile:

Je persiste et signe, c’est pas de l’émulation, le service ne tournerais pas mieux en natif, maintenant ça ajoute de la complexité.

Pas dans l’absolu, mais utilisais du php-fpm est tout de même plus aisé (quand c’est possible) à régler .

A moins d’avoir une réelle obligation le MPM prefork pour moi est le plus gourmand, l’event et le worker sont bien moins gourmand.

Tu pourrais avoir un répartisseur de charge, du Haproxy voir même du Nginx ou/et du WAF que ce serait quasi pareil, si c’est bien réglé les requêtes vont jusqu’à bon terme.

Lorsque ta plateforme était inaccessible, tu avais quoi dans les logs ?
Tu ne te serais pas DDOS tous seul par un manque de thread disponible à cause de l’outil de bench ?

1 J'aime

Pas tout à fait d’accord avec @Clochette :wink:
Le fait d’utiliser un conteneur diminue probablement un peu les performances.
Le module PHP d’Apache (mod_php) impose l’utilisation du mpm_prefork et c’est une combinaison beaucoup, vraiment beaucoup, moins performante que PHP-FPM (avec fcgid) et le mpm_event.

ok, tout ça je ne savais pas…
j’ai regarder la conf de l’apache frontal (mpm_prefork)

<IfModule mpm_prefork_module>
        StartServers              2
        MinSpareServers           1
        MaxSpareServers           3
        MaxRequestWorkers         12
        MaxConnectionsPerChild    3
</IfModule>

Ensuite pour l’apache sous docker (mpm_prefork aussi)

<IfModule mpm_prefork_module>
	StartServers			 5
	MinSpareServers		  5
	MaxSpareServers		 10
	MaxRequestWorkers	  150
	MaxConnectionsPerChild   0
</IfModule>

Quand à savoir si je ne me suis pas DDOS tout seul, je n’en suis pas sur, mais ça se pourrait … :upside_down_face:

Pour les logs, je t’avouerais que je n’ai pas eu le grand reflexe de regarder tout de suite … Je vais fouiller un peu pour voir si je les retrouve…

[Hors-sujet]

Déconne pas, ça existe!
https://www.amazon.fr/Westmark-30312270-Couteau-Pelle-à-Polypropylène/dp/B01AT5A3Z2/ref=mp_s_a_1_3?dchild=1&keywords=couteau+plastique&qid=1602916109&sr=8-3
Alors en appuyant un peu fort ça peut peut-être marcher… :joy:

[/Hors-sujet]

MaxRequestWorkers 150

Si tu fais des tests de montée en charge ou si simplement ton site commence à générer pas mal de trafic tu va vite être bloqué par cette directive qui limite le nombre de requêtes simultanées.

D’où, entres autres, l’interêt d’utiliser le MPM event, ou worker sur un serveur en production et d’ajuster cette directive (et les autres) à la charge potentielle du serveur.

Un page pas mal faite sur ce type d’optimisation :

1 J'aime

Hello @Clochette, @Bruno1,@DarkGagan !

Désolé, j’ai eu beaucoup de travail ces derniers temps, surtout que j’ai changé de poste.

Suite a ce que disait Clochette j’ai fait quelques test mais impossible de passer apache avec mpm_event et PHP-FPM…
pourtant j’ai suivi pas mal de tuto bien expliquer mais je tombais toujours sur une erreur qui empêchais de démarrer le service apache2 … :cry:

Par contre j’ai modifier les données du mpm_prefork pour les deux apache2 (docker y compris) pour leur faire accepter ces configs:

<IfModule mpm_prefork_module>
        StartServers              4
        MinSpareServers           20
        MaxSpareServers           40
        MaxRequestWorkers         200
        MaxConnectionsPerChild    4500
</IfModule>
<IfModule mpm_prefork_module>
	StartServers			 5
	MinSpareServers		  5
	MaxSpareServers		 10
	MaxRequestWorkers	  150
	MaxConnectionsPerChild   0
</IfModule>

Comment trouvez-vous cette config ?