Apache HTTP Server est l’un des serveurs web les plus utilisĂ©s au monde. Cependant, une mauvaise configuration peut entraĂźner des ralentissements et une consommation excessive de ressources. Cet article vous guidera Ă travers un processus dĂ©taillĂ© pour diagnostiquer les performances de votre serveur Apache et optimiser sa configuration en fonction des caractĂ©ristiques de votre machine.
Si vous avez configurĂ© un reverse proxy et que vous constatez des latences, vous pouvez dĂ©terminer si le problĂšme vient de votre reverse proxy ou de votre serveur backend (celui attaquĂ© par le vhost du reverse proxy) en utilisant curl tout simplement. Pour identifier l’origine du problĂšme, il est possible de tester la connexion via le reverse proxy (RP) en ciblant directement le nom de serveur (servername) hĂ©bergĂ© sur le RP :
curl -o /dev/null -s -w "Time to first byte (TTFB): %{time_starttransfer}s\nTotal time: %{time_total}s\n" https://front.test.fr/
Ensuite, on peut effectuer le mĂȘme test en interrogeant directement le backend correspondant au vhost concernĂ© :
curl -o /dev/null -s -w "Time to first byte (TTFB): %{time_starttransfer}s\nTotal time: %{time_total}s\n" https://backend.test.fr/
En comparant les rĂ©sultats des deux requĂȘtes, il est possible de dĂ©terminer si le problĂšme de latence provient du reverse proxy ou directement du backend. Une diffĂ©rence significative de temps de rĂ©ponse entre les deux tests indiquera un goulet dâĂ©tranglement sur lâun des deux composants.
Table of Contents
1. Identifier les caractéristiques du serveur
Avant d’optimiser Apache, il est essentiel de connaĂźtre les ressources disponibles sur votre serveur.
Vérifier la mémoire RAM
free -h
Ce qui vous donnera un retour du type :
total used free shared buff/cache available
Mem: 4.0G 1.5G 500M 200M 2.0G 2.2G
L’important ici est de noter la mĂ©moire disponible.
Vérifier le CPU
lscpu
Ce qui affichera des informations comme :
Architecture: x86_64
CPU(s): 2
Thread(s) per core: 1
Core(s) per socket: 2
Ce qui nous permet de voir que nous avons 2 CPU physiques.
Vérifier la charge systÚme
top -n 1 | head -n 10
Ou avec une moyenne sur 15 minutes :
uptime
Si la charge est supérieure au nombre de CPU, cela indique une surcharge.
2. Analyser la charge d’Apache
VĂ©rifier la consommation moyenne d’un process Apache
ps -ylC apache2 --sort:rss | awk '{sum+=$8; count++} END {print "Mémoire moyenne par process Apache:", sum/count/1024, "MB"}'
Vérifier le nombre de connexions actives
netstat -anp | grep ":80 " | wc -l
netstat -anp | grep ":443 " | wc -l
Cela vous donne une idée du nombre de connexions en cours sur HTTP et HTTPS.
VĂ©rifier les requĂȘtes en temps rĂ©el
tail -f /var/log/apache2/access.log
Ou encore :
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -20
Cela permet d’identifier les IP qui gĂ©nĂšrent le plus de trafic.
3. Optimisation d’Apache selon les ressources disponibles
La configuration d’Apache dĂ©pend du module MPM (Multi-Processing Module) utilisĂ©. Le choix du bon MPM est crucial. Pour les serveurs modernes, mpm_event
est recommandé car il gÚre mieux les connexions simultanées.
Modifier la configuration MPM
Pour un serveur 2 vCPU et 4 Go de RAM
Ăditez /etc/apache2/mods-enabled/mpm_event.conf
:
<IfModule mpm_event_module>
ThreadLimit 64
StartServers 4
MinSpareThreads 75
MaxSpareThreads 150
ThreadsPerChild 25
MaxRequestWorkers 300
MaxConnectionsPerChild 10000
</IfModule>
Explication :
StartServers
: Nombre initial de processus Apache.MinSpareThreads
etMaxSpareThreads
: Ajustent les threads disponibles en attente de requĂȘtes.ThreadsPerChild
: Nombre de threads par processus.MaxRequestWorkers
: Nombre maximal de requĂȘtes simultanĂ©es.MaxConnectionsPerChild
: Redémarrage périodique des processus pour libérer la mémoire.
Calcul des valeurs optimales
Les paramĂštres MaxRequestWorkers
et ThreadsPerChild
doivent ĂȘtre ajustĂ©s selon la RAM disponible.
Mode de calcul :
- Déterminer la mémoire consommée par un processus Apache :
ps -ylC apache2 --sort:rss | awk '{sum+=$8} END {print sum/NR/1024 " MB"}'
- Supposons que chaque processus utilise 40 Mo de RAM et que vous avez 4 Go de RAM :
- Il faut laisser de la mémoire pour le systÚme et autres services. Par exemple, 1 Go réservé.
- RAM disponible pour Apache : 3 Go = 3072 Mo.
- Nombre de
MaxRequestWorkers
optimal :3072 / 40 â 76
.
Ainsi, ajuster MaxRequestWorkers
autour de cette valeur pour éviter une surcharge mémoire.
Optimisation des limites systĂšme avec ulimit
Lâoutil ulimit
permet de dĂ©finir et dâajuster les limites des ressources systĂšme allouĂ©es aux processus sous Linux, y compris Apache. Ces paramĂštres impactent directement la performance et la stabilitĂ© du serveur, en contrĂŽlant le nombre maximal de fichiers ouverts (nofile
), le nombre de processus utilisateur (nproc
), la taille de la pile (stack
), et bien d’autres.
Vérifier les limites actuelles
Pour connaßtre les limites appliquées à Apache, utilisez :
sudo su - www-data -s /bin/bash -c 'ulimit -a'
ou directement :
ulimit -a
ĂlĂ©ments clĂ©s Ă optimiser :
nofile
(Nombre maximal de fichiers ouverts)
Une valeur trop basse peut entraĂźner des erreursToo many open files
, notamment pour les connexions simultanées gérées par Apache.ulimit -n 65535
đč Solution permanente : Ajoutez dans/etc/security/limits.conf
:www-data soft nofile 65535 www-data hard nofile 65535
nproc
(Nombre maximal de processus par utilisateur)
Si trop faible, Apache peut ĂȘtre limitĂ© dans sa capacitĂ© Ă crĂ©er de nouveaux workers.ulimit -u 65535
stack
(Taille de la pile par thread)
Une valeur trop basse peut provoquer des plantages sur des applications gourmandes.ulimit -s 8192
Appliquer les changements en live
Si vous souhaitez modifier ces valeurs sans redémarrer le serveur :
ulimit -n 65535
ulimit -u 65535
Toutefois, ces changements seront réinitialisés aprÚs un redémarrage. Pour les rendre persistants, configurez-les dans /etc/security/limits.conf
et /etc/systemd/system/apache2.service.d/override.conf
.
En ajustant ces paramĂštres de maniĂšre adĂ©quate, vous Ă©vitez des limitations artificielles qui pourraient brider la performance dâApache sous forte charge. đ
Activer la compression
Ajoutez ou modifiez /etc/apache2/mods-available/deflate.conf
:
<IfModule mod_deflate.c>
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/wasm
AddOutputFilterByType DEFLATE application/xml
</IfModule>
</IfModule>
Puis activez-le :
a2enmod deflate
systemctl restart apache2
Activer la mise en cache
Modifiez /etc/apache2/mods-available/expires.conf
:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
</IfModule>
Activez-le :
a2enmod expires
systemctl restart apache2
Ajuster KeepAlive
Le Keep-Alive permet aux connexions HTTP de rester ouvertes, amĂ©liorant ainsi la rapiditĂ© des requĂȘtes.
Dans /etc/apache2/apache2.conf
, ajoutez ou modifiez :
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Cela permet de maintenir les connexions ouvertes et d’Ă©viter les surcharges CPU.
Note : Il est possible de mettre
MaxKeepAliveRequests 0
si le serveur a beaucoup de ressources ou si un reverse proxy interne dans une zone sĂ©curisĂ©e (Ă©vitant toute attaque type flooding) afin d’Ă©viter toute limitation artificielle.
Activer les protocoles HTTP/2 et HTTP/1.1
L’activation de HTTP/2 permet une meilleure gestion des connexions simultanĂ©es et une latence rĂ©duite.
Ajoutez la directive suivante dans votre configuration Apache (/etc/apache2/apache2.conf) :
Protocols h2 http/1.1
Puis redémarrez Apache :
systemctl restart apache2
Limiter les connexions par IP avec mod_qos
Pour installer mod_qos :
apt install libapache2-mod-qos
Si un site consomme trop de ressources, limitez le nombre de connexions par IP :
<IfModule qos_module>
QS_SrvMaxConn 300
QS_SrvMaxConnPerIP 20
QS_EventPerSecLimit QS_Event 20
</IfModule>
Puis activez le module :
a2enmod qos
systemctl restart apache2
4. Surveiller et ajuster en fonction de la charge
Installer Apache Benchmark (ab)
apt install apache2-utils
Puis tester la charge avec :
ab -n 1000 -c 100 http://localhost/
Cela envoie 1000 requĂȘtes avec 100 connexions simultanĂ©es pour voir comment Apache rĂ©pond.
Surveiller l’occupation mĂ©moire d’Apache
ps aux | grep apache2
Ou :
htop
Cela permet de voir si les processus Apache consomment trop de ressources.
Activer les logs de performance
Dans /etc/apache2/conf-available/logging.conf
:
LogLevel info
CustomLog /var/log/apache2/access.log combined
Puis :
a2enconf logging
systemctl restart apache2
Conclusion
Lâoptimisation dâApache repose sur une bonne comprĂ©hension des ressources de votre serveur et un ajustement progressif des paramĂštres. En appliquant ces recommandations, vous amĂ©liorez la rĂ©activitĂ© et la stabilitĂ© de votre serveur web tout en rĂ©duisant la consommation de ressources.