16. Optimisation des performances WordPress
16.1. Introduction
Section intitulée « 16.1. Introduction »Après avoir sécurisé votre installation WordPress, l’étape suivante est l’optimisation de ses performances. Cette section couvre les techniques d’optimisation essentielles qui permettront de :
- Réduire l’utilisation des ressources serveur
- Améliorer les temps de chargement des pages
- Gérer plus de visiteurs simultanés
- Améliorer l’expérience utilisateur globale
16.2. Politique de révisions des articles
Section intitulée « 16.2. Politique de révisions des articles »WordPress enregistre automatiquement des révisions de vos articles et pages au fur et à mesure que vous les modifiez. Bien qu’utile pour la récupération de contenu, des révisions excessives peuvent alourdir votre base de données.
16.2.1. Limitation des révisions des articles
Section intitulée « 16.2.1. Limitation des révisions des articles »Vous pouvez contrôler les révisions des articles en ajoutant une directive à votre fichier wp-config.php :
# Naviguer vers votre installation WordPresscd /var/www/example.com/sudo vim public_html/wp-config.phpAjoutez l’une de ces lignes à votre configuration :
// Désactiver complètement les révisions des articlesdefine('WP_POST_REVISIONS', false);
// Ou limiter à un nombre spécifique (recommandé : 3-5)define('WP_POST_REVISIONS', 3);Après avoir effectué les modifications, redémarrez PHP-FPM pour vider le opcache :
sudo systemctl restart php8.3-fpm16.3. Définition de la limite de mémoire maximale
Section intitulée « 16.3. Définition de la limite de mémoire maximale »WordPress peut être gourmand en mémoire, surtout avec des thèmes et des extensions complexes. Augmenter la limite de mémoire peut prévenir les erreurs “out of memory”.
16.3.1. Configuration du pool PHP-FPM
Section intitulée « 16.3.1. Configuration du pool PHP-FPM »Commencez par augmenter la limite de mémoire dans la configuration de votre pool PHP-FPM :
# Modifier la configuration du pool PHP-FPM de votre sitesudo vim /etc/php/8.3/fpm/pool.d/example.com.confTrouvez et modifiez la ligne de limite de mémoire :
; Augmenter de 32M par défaut à 256M;php_admin_value[memory_limit] = 32Mphp_admin_value[memory_limit] = 256M16.3.2. Configuration WordPress
Section intitulée « 16.3.2. Configuration WordPress »Définissez également la limite de mémoire dans WordPress lui-même :
# Modifier votre configuration WordPresssudo vim /var/www/example.com/public_html/wp-config.phpAjoutez cette ligne à votre configuration :
/** Memory Limit for WordPress */define('WP_MEMORY_LIMIT', '256M');16.4. Remplacement du WP CRON par un VRAI CRON
Section intitulée « 16.4. Remplacement du WP CRON par un VRAI CRON »WordPress utilise un système cron virtuel (WP-Cron) qui se déclenche lors du chargement des pages, ce qui peut être inefficace et peu fiable. Le remplacer par une vraie tâche cron système améliore les performances et la fiabilité.
16.4.1. Désactivation de WP-Cron
Section intitulée « 16.4.1. Désactivation de WP-Cron »Commencez par désactiver le WP-Cron intégré :
# Modifier votre configuration WordPresssudo vim /var/www/example.com/public_html/wp-config.phpAjoutez cette ligne à votre configuration :
/** Désactiver le système cron intégré */define('DISABLE_WP_CRON', true);Redémarrez PHP-FPM pour appliquer les modifications :
sudo systemctl restart php8.3-fpm16.4.2. Mise en place d’une vraie tâche cron
Section intitulée « 16.4.2. Mise en place d’une vraie tâche cron »Maintenant, configurez une tâche cron système pour déclencher les événements cron de WordPress :
# Modifier votre crontabcrontab -eAjoutez cette ligne pour exécuter le cron WordPress toutes les 15 minutes :
# Exécuter le cron WordPress toutes les 15 minutes*/15 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&116.5. Introduction à la mise en cache
Section intitulée « 16.5. Introduction à la mise en cache »La mise en cache est l’un des moyens les plus efficaces pour améliorer les performances de WordPress. Elle réduit les requêtes à la base de données et l’exécution PHP en stockant du contenu pré-généré.
Types de sites WordPress
Pour les besoins de mise en cache, les sites WordPress peuvent être catégorisés comme :
- Sites statiques : Le contenu change rarement et est identique pour tous les utilisateurs (blogs, sites vitrine)
- Sites dynamiques : Le contenu change fréquemment ou est personnalisé pour chaque utilisateur (e-commerce, sites avec abonnement)
16.5.1. Types de mise en cache
Section intitulée « 16.5.1. Types de mise en cache »Il existe plusieurs niveaux de mise en cache qui peuvent être implémentés :
- Mise en cache de pages : Stocke des pages HTML complètes
- Mise en cache d’objets : Stocke les résultats des requêtes à la base de données
- Mise en cache du navigateur : Indique aux navigateurs de stocker les ressources statiques
- Mise en cache CDN : Distribue le contenu mis en cache à travers des serveurs mondiaux
16.6. Implémentation de PHP OPcache
Section intitulée « 16.6. Implémentation de PHP OPcache »PHP OPcache améliore les performances en stockant le bytecode précompilé des scripts en mémoire, éliminant le besoin pour PHP de charger et analyser les scripts à chaque requête.
16.6.1. Configuration d’OPcache
Section intitulée « 16.6.1. Configuration d’OPcache »Modifiez la configuration du pool PHP-FPM de votre site :
# Naviguer vers le répertoire des pools PHP-FPMcd /etc/php/8.3/fpm/pool.d/lssudo vim example.com.confAjoutez ces paramètres OPcache à votre configuration :
; CONFIGURATION OPCACHE - SERVEUR DE DEVELOPPEMENTphp_admin_flag[opcache.enabled] = 1php_admin_value[opcache.memory_consumption] = 256php_admin_value[opcache.interned_strings_buffer] = 32php_admin_value[opcache.max_accelerated_files] = 20000php_admin_flag[opcache.validate_timestamps] = 1php_admin_value[opcache.revalidate_freq] = 2php_admin_flag[opcache.validate_permission] = 1Pour les serveurs de production, utilisez plutôt ces paramètres :
; CONFIGURATION OPCACHE - SERVEUR DE PRODUCTIONphp_admin_flag[opcache.enabled] = 1php_admin_value[opcache.memory_consumption] = 256php_admin_value[opcache.interned_strings_buffer] = 32php_admin_value[opcache.max_accelerated_files] = 20000php_admin_flag[opcache.validate_timestamps] = 0php_admin_flag[opcache.validate_permission] = 1Appliquez les modifications :
sudo systemctl reload php8.3-fpm16.6.2. Détermination de la valeur optimale de max_accelerated_files
Section intitulée « 16.6.2. Détermination de la valeur optimale de max_accelerated_files »Pour déterminer la valeur optimale de max_accelerated_files, comptez les fichiers PHP dans votre installation :
cd /var/www/sudo find . -type f -print | grep php | wc -lDéfinissez max_accelerated_files à au moins 20 % de plus que ce nombre.
16.7. Mise en cache d’un site WordPress “statique”
Section intitulée « 16.7. Mise en cache d’un site WordPress “statique” »Pour les sites dont le contenu ne change pas fréquemment et est identique pour tous les utilisateurs, vous pouvez implémenter des stratégies de mise en cache agressives. Choisissez l’une des méthodes suivantes en fonction de vos préférences et exigences.
16.7.1. Utilisation du cache FastCGI
Section intitulée « 16.7.1. Utilisation du cache FastCGI »Le cache FastCGI est une solution de mise en cache au niveau serveur intégrée à Nginx. Elle est très efficace et ne nécessite pas d’extensions WordPress.
16.7.1.1. Configuration de Nginx pour le cache FastCGI
Section intitulée « 16.7.1.1. Configuration de Nginx pour le cache FastCGI »Commencez par modifier la configuration principale de Nginx :
cd /etc/nginxsudo vim nginx.confAjoutez les directives suivantes au contexte http (juste au-dessus du commentaire “Virtual Host Configs”) :
### CACHE FASTCGI# Directive fastcgi_cache_path - PATH et NAME doivent être uniques pour chaque site# Ajoutez un nouveau fastcgi_cache_path pour chaque site avec un nouveau nom keys_zonefastcgi_cache_path /var/run/SITE levels=1:2 keys_zone=NAME:100m inactive=60m;# Appliqué à tous les sitesfastcgi_cache_key "$scheme$request_method$host$request_uri";fastcgi_cache_use_stale error timeout invalid_header http_500;fastcgi_ignore_headers Cache-Control Expires Set-Cookie;16.7.1.2. Création des règles d’exclusion du cache
Section intitulée « 16.7.1.2. Création des règles d’exclusion du cache »Créez un fichier pour les règles d’exclusion du cache :
cd /etc/nginx/includes/sudo vim fastcgi_cache_excludes.confAjoutez ces règles pour exclure le contenu dynamique de la mise en cache :
# FICHIER D'INCLUSION DES EXCLUSIONS DU CACHE NGINXset $skip_cache 0;# Les requêtes POST et les URL avec une chaîne de requête doivent toujours être transmises à PHPif ($request_method = POST) { set $skip_cache 1;}if ($query_string != "") { set $skip_cache 1;}# Ne pas mettre en cache les URI contenant les segments suivantsif ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") { set $skip_cache 1;}# Ne pas utiliser le cache pour les utilisateurs connectés ou les commentateurs récentsif ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { set $skip_cache 1;}16.7.1.3. Mise à jour de la configuration Nginx de votre site
Section intitulée « 16.7.1.3. Mise à jour de la configuration Nginx de votre site »Modifiez la configuration Nginx de votre site :
cd /etc/nginx/sites-availablesudo vim example.com.confAjoutez ces lignes à votre bloc serveur :
# Inclure les règles d'exclusion du cacheinclude /etc/nginx/includes/fastcgi_cache_excludes.conf;
# Ajouter l'en-tête de statut du cacheadd_header X-FastCGI-Cache $upstream_cache_status;
# Ajouter ces directives au bloc location PHPlocation ~ \.php$ { # Directives de traitement PHP existantes...
# Directives du cache FastCGI fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; fastcgi_cache NAME; fastcgi_cache_valid 60m;}16.7.1.4. Ajout de la capacité de purge du cache
Section intitulée « 16.7.1.4. Ajout de la capacité de purge du cache »Ajoutez un bloc location pour purger le cache :
# Ajouter ceci à votre bloc serveurlocation ~ /purge(/.*) { fastcgi_cache_purge NAME "$scheme$request_method$host$1";}Appliquez les modifications :
sudo nginx -tsudo systemctl reload nginx16.7.1.5. Test du cache
Section intitulée « 16.7.1.5. Test du cache »Testez si la mise en cache fonctionne :
# La première requête devrait afficher MISScurl -I https://example.com
# La deuxième requête devrait afficher HITcurl -I https://example.comRecherchez l’en-tête X-FastCGI-Cache dans la réponse.
16.7.1.6. Suppression du cache FastCGI (si nécessaire)
Section intitulée « 16.7.1.6. Suppression du cache FastCGI (si nécessaire) »Si vous devez supprimer le cache FastCGI :
cd /etc/nginx/sites-availablesudo vim example.com.confCommentez ou supprimez ces lignes :
# Supprimer ou commenter ces lignes# include /etc/nginx/includes/fastcgi_cache_excludes.conf;# add_header X-FastCGI-Cache $upstream_cache_status;
# Dans le bloc location PHP, supprimer ou commenter :# fastcgi_cache_bypass $skip_cache;# fastcgi_no_cache $skip_cache;# fastcgi_cache NAME;# fastcgi_cache_valid 60m;
# Supprimer le bloc location de purge# location ~ /purge(/.*) {# fastcgi_cache_purge NAME "$scheme$request_method$host$1";# }Appliquez les modifications :
sudo nginx -tsudo systemctl reload nginxsudo systemctl restart php8.3-fpm16.7.2. Utilisation de WP Super Cache
Section intitulée « 16.7.2. Utilisation de WP Super Cache »WP Super Cache est une extension populaire de mise en cache WordPress qui génère des fichiers HTML statiques à partir de votre contenu WordPress dynamique.
16.7.2.1. Installation de WP Super Cache
Section intitulée « 16.7.2.1. Installation de WP Super Cache »- Connectez-vous à votre tableau de bord d’administration WordPress
- Allez dans Extensions > Ajouter
- Recherchez “WP Super Cache”
- Cliquez sur “Installer maintenant” puis “Activer”
16.7.2.2. Configuration de Nginx pour WP Super Cache
Section intitulée « 16.7.2.2. Configuration de Nginx pour WP Super Cache »Créez un fichier de configuration pour WP Super Cache :
cd /etc/nginx/includes/sudo vim wp_super_cache_excludes.confAjoutez ces règles :
# Règles d'exclusion du cache NGINX pour WP Super Cacheset $cache_uri $request_uri;
# Les requêtes POST et les URL avec une chaîne de requête doivent toujours être transmises à PHPif ($request_method = POST) { set $cache_uri 'null cache';}
if ($query_string != "") { set $cache_uri 'null cache';}
# Ne pas mettre en cache les URI contenant les segments suivantsif ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { set $cache_uri 'null cache';}
# Ne pas utiliser le cache pour les utilisateurs connectés ou les commentateurs récentsif ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { set $cache_uri 'null cache';}
# Utiliser le fichier en cache ou le fichier réel s'il existe, sinon transmettre la requête à WordPresslocation / { try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args;}Mettez à jour la configuration Nginx de votre site :
cd /etc/nginx/sites-available/sudo vim example.com.confCommentez le bloc location par défaut et incluez la configuration WP Super Cache :
# Commenter le bloc location par défaut# location / {# try_files $uri $uri/ /index.php$is_args$args;# }
# Inclure la configuration WP Super Cacheinclude /etc/nginx/includes/wp_super_cache_excludes.conf;Appliquez les modifications :
sudo nginx -tsudo systemctl reload nginx16.7.2.3. Configuration de l’extension WP Super Cache
Section intitulée « 16.7.2.3. Configuration de l’extension WP Super Cache »- Allez dans Réglages > WP Super Cache dans votre administration WordPress
- Activez la mise en cache en sélectionnant “Caching On”
- Sous l’onglet Avancé :
- Sélectionnez “Use mod_rewrite to serve cache files”
- Cochez “Compress pages”
- Cochez “Don’t cache pages for known users”
- Cochez “Cache rebuild”
- Cliquez sur “Update Status”
16.7.2.4. Suppression de WP Super Cache (si nécessaire)
Section intitulée « 16.7.2.4. Suppression de WP Super Cache (si nécessaire) »Si vous devez supprimer WP Super Cache :
-
Désactivez et désinstallez l’extension depuis l’administration WordPress
-
Restaurez votre configuration Nginx :
cd /etc/nginx/sites-available/sudo vim example.com.confSupprimez l’inclusion de WP Super Cache et restaurez le bloc location par défaut :
# Supprimer cette ligne# include /etc/nginx/includes/wp_super_cache_excludes.conf;
# Décommenter le bloc location par défautlocation / { try_files $uri $uri/ /index.php$is_args$args;}Appliquez les modifications :
sudo nginx -tsudo systemctl reload nginxsudo systemctl reload php8.3-fpm16.7.3. Utilisation de W3 Total Cache (W3TC)
Section intitulée « 16.7.3. Utilisation de W3 Total Cache (W3TC) »W3 Total Cache est une extension de mise en cache complète avec des options de configuration étendues pour diverses méthodes de mise en cache.
16.7.3.1. Installation de W3 Total Cache
Section intitulée « 16.7.3.1. Installation de W3 Total Cache »- Connectez-vous à votre tableau de bord d’administration WordPress
- Allez dans Extensions > Ajouter
- Recherchez “W3 Total Cache”
- Cliquez sur “Installer maintenant” puis “Activer”
16.7.3.2. Préparation pour l’intégration Nginx de W3TC
Section intitulée « 16.7.3.2. Préparation pour l’intégration Nginx de W3TC »Créez un fichier pour que W3TC puisse écrire ses règles Nginx :
cd /var/www/example.com/public_html/sudo touch nginx.confsudo chown username:username nginx.confsudo chmod 660 nginx.confAjoutez une directive de sécurité pour empêcher l’accès direct au fichier nginx.conf :
cd /etc/nginx/includes/sudo vim nginx_security_directives.confAjoutez cette ligne :
location = /nginx.conf { deny all; }16.7.3.3. Création des règles d’exclusion du cache W3TC
Section intitulée « 16.7.3.3. Création des règles d’exclusion du cache W3TC »Créez un fichier de configuration pour les exclusions de cache W3TC :
cd /etc/nginx/includes/sudo vim w3tc_cache_excludes.confAjoutez ces règles :
# ---------------------# FICHIER D'EXCLUSIONS W3 TOTAL CACHE# ---------------------set $cache_uri $request_uri;
# Les requêtes POST et les URL avec une chaîne de requête doivent toujours être transmises à PHPif ($request_method = POST) { set $cache_uri 'null cache';}if ($query_string != "") { set $cache_uri 'null cache';}# Ne pas mettre en cache les URI contenant les segments suivantsif ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { set $cache_uri 'null cache';}# Ne pas utiliser le cache pour les utilisateurs connectés ou les commentateurs récentsif ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { set $cache_uri 'null cache';}# Utiliser le fichier en cache ou le fichier réel s'il existe, sinon transmettre la requête à WordPresslocation / { try_files /wp-content/w3tc/pgcache/$cache_uri/_index.html $uri $uri/ /index.php?$args;}16.7.3.4. Mise à jour de la configuration Nginx de votre site
Section intitulée « 16.7.3.4. Mise à jour de la configuration Nginx de votre site »Modifiez la configuration Nginx de votre site :
cd /etc/nginx/sites-available/sudo vim example.com.confCommentez le bloc location par défaut et incluez les configurations W3TC :
# Commenter le bloc location par défaut#location / {# try_files $uri $uri/ /index.php$is_args$args;#}
# Inclure les configurations W3TCinclude /etc/nginx/includes/w3tc_cache_excludes.conf;include /var/www/example.com/public_html/nginx.conf;Installez l’extension PHP Tidy requise par W3TC :
sudo apt updatesudo apt install php8.3-tidyAppliquez les modifications :
sudo nginx -tsudo systemctl reload nginxsudo systemctl reload php8.3-fpm16.7.3.5. Configuration de l’extension W3 Total Cache
Section intitulée « 16.7.3.5. Configuration de l’extension W3 Total Cache »- Allez dans Performance > General Settings dans votre administration WordPress
- Activez Page Cache et définissez la méthode à “Disk: Enhanced”
- Activez Browser Cache
- Activez Minify (facultatif)
- Sous Performance > Page Cache :
- Cochez “Cache SSL”
- Cochez “Don’t cache pages for logged in users”
- Enregistrez tous les paramètres
16.7.3.6. Suppression de W3 Total Cache (si nécessaire)
Section intitulée « 16.7.3.6. Suppression de W3 Total Cache (si nécessaire) »Si vous devez supprimer W3 Total Cache :
-
Désactivez et désinstallez l’extension depuis l’administration WordPress
-
Restaurez votre configuration Nginx :
cd /etc/nginx/sites-available/sudo vim example.com.confSupprimez les inclusions W3TC et restaurez le bloc location par défaut :
# Restaurer le bloc location par défautlocation / { try_files $uri $uri/ /index.php$is_args$args;}
# Supprimer ces lignes# include /etc/nginx/includes/w3tc_cache_excludes.conf;# include /var/www/example.com/public_html/nginx.conf;Supprimez les fichiers W3TC :
cd /var/www/example.com/public_html/wp-content/sudo rm -rf cache/ w3tc-config/
cd /var/www/example.com/public_html/sudo rm nginx.confAppliquez les modifications :
sudo systemctl reload php8.3-fpmsudo systemctl reload nginx16.8. Création d’un cache d’objets persistant avec Redis
Section intitulée « 16.8. Création d’un cache d’objets persistant avec Redis »La mise en cache d’objets stocke les résultats des requêtes à la base de données en mémoire, réduisant significativement la charge de la base de données. Redis est un excellent choix pour la mise en cache d’objets grâce à sa rapidité et ses capacités de persistance.
16.8.1. Installation de Redis
Section intitulée « 16.8.1. Installation de Redis »Installez le serveur Redis et l’extension PHP Redis :
sudo apt updatesudo apt install redis-server php8.3-redisVérifiez que Redis fonctionne :
sudo systemctl status redis-serverVérifiez le journal Redis pour les avertissements ou erreurs :
sudo cat /var/log/redis/redis-server.log16.8.2. Optimisation de la configuration Redis
Section intitulée « 16.8.2. Optimisation de la configuration Redis »16.8.2.1. Correction de l’avertissement de surengagement mémoire
Section intitulée « 16.8.2.1. Correction de l’avertissement de surengagement mémoire »Si vous voyez cet avertissement dans les journaux Redis :
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.Corrigez-le en créant un fichier de configuration sysctl :
cd /etc/sysctl.d/sudo vim 11-redis.confAjoutez cette ligne :
vm.overcommit_memory = 116.8.2.2. Définition des limites de mémoire
Section intitulée « 16.8.2.2. Définition des limites de mémoire »Configurez les limites de mémoire Redis :
sudo vim /etc/redis/redis.confTrouvez et modifiez ces paramètres :
# Définir la mémoire maximale à utiliser (ajustez selon les ressources de votre serveur)maxmemory 256mb
# Définir la politique d'éviction (LRU = Least Recently Used)maxmemory-policy allkeys-lruAppliquez les modifications :
sudo systemctl restart redis-server16.8.3. Configuration de WordPress pour la mise en cache d’objets Redis
Section intitulée « 16.8.3. Configuration de WordPress pour la mise en cache d’objets Redis »16.8.3.1. Installation d’une extension de cache d’objets Redis
Section intitulée « 16.8.3.1. Installation d’une extension de cache d’objets Redis »- Connectez-vous à votre tableau de bord d’administration WordPress
- Allez dans Extensions > Ajouter
- Recherchez “Redis Object Cache”
- Installez et activez l’extension de Till Krüss
16.8.3.2. Ajout de la configuration Redis à WordPress
Section intitulée « 16.8.3.2. Ajout de la configuration Redis à WordPress »Modifiez votre configuration WordPress :
cd /var/www/example.com/public_html/sudo vim wp-config.phpAjoutez ces lignes :
/** Redis Object Cache Settings */define('WP_CACHE_KEY_SALT', 'example.com');16.8.4. Considérations WooCommerce
Section intitulée « 16.8.4. Considérations WooCommerce »Si vous utilisez WooCommerce, vous avez besoin d’une configuration spéciale pour empêcher la mise en cache des données de session :
/** EMPECHER LA MISE EN CACHE REDIS DES DONNEES DE SESSION WOO */define('WP_REDIS_IGNORED_GROUPS', 'wc_session');Excluez également ces pages de la mise en cache de pages :
/cart//my-account//checkout/
Et excluez ces cookies de la génération de clés de cache :
woocommerce_cart_hashwoocommerce_items_in_cartwp_woocommerce_session_woocommerce_recently_viewedstore_notice[notice id]_wc_session_
16.9. Mise en cache d’un site WordPress “dynamique”
Section intitulée « 16.9. Mise en cache d’un site WordPress “dynamique” »Pour les sites avec du contenu personnalisé ou des changements fréquents (e-commerce, sites avec abonnement), vous avez besoin d’une approche de mise en cache différente qui combine la mise en cache de pages avec la mise en cache d’objets.
16.9.1. Introduction à la mise en cache de sites dynamiques
Section intitulée « 16.9.1. Introduction à la mise en cache de sites dynamiques »Les sites dynamiques nécessitent :
- La mise en cache d’objets (Redis) pour réduire la charge de la base de données
- Une mise en cache de pages sélective excluant le contenu personnalisé
- La mise en cache du navigateur pour les ressources statiques
16.9.2. Combinaison WP Super Cache et Redis
Section intitulée « 16.9.2. Combinaison WP Super Cache et Redis »Cette approche utilise WP Super Cache pour la mise en cache de pages avec des exclusions soigneuses et Redis pour la mise en cache d’objets.
- Suivez les étapes d’installation de Redis de la section 16.8
- Suivez les étapes d’installation de WP Super Cache de la section 16.7.2
- Dans les paramètres WP Super Cache :
- Activez “Don’t cache pages for known users”
- Ajoutez des exclusions personnalisées pour les pages dynamiques
16.9.3. Combinaison W3TC et Redis
Section intitulée « 16.9.3. Combinaison W3TC et Redis »Cette approche utilise W3 Total Cache avec Redis comme backend de cache d’objets.
- Suivez les étapes d’installation de Redis de la section 16.8
- Suivez les étapes d’installation de W3TC de la section 16.7.3
- Dans W3TC Performance > General Settings :
- Définissez la méthode de cache d’objets à “Redis”
- Configurez l’hôte Redis (généralement “localhost”) et le port (6379)
- Dans les paramètres de cache de pages :
- Activez “Don’t cache pages for logged in users”
- Ajoutez des exclusions personnalisées pour les pages dynamiques
16.10. Réglage de PHP-FPM
Section intitulée « 16.10. Réglage de PHP-FPM »Une configuration correcte de PHP-FPM est cruciale pour des performances WordPress optimales.
16.10.1. Analyse de l’utilisation des ressources PHP-FPM
Section intitulée « 16.10.1. Analyse de l’utilisation des ressources PHP-FPM »Commencez par identifier les utilisateurs de vos pools PHP-FPM :
# Afficher tous les noms d'utilisateurs des pools PHP-FPMgrep -E '^\s*user\s*=' /etc/php/8.3/fpm/pool.d/*.conf | awk -F= '{print $2}' | xargs | tr ' ' '\n' | sort -uCalculez l’utilisation mémoire moyenne par processus PHP-FPM :
# Remplacez POOL_USER par votre nom d'utilisateur de pool réelps -C php-fpm --user POOL_USER -o rss= | awk '{ sum += $1; count++ } END { if (count > 0) printf ("%d%s\n", sum/NR/1024,"M") }'Exemple :
ps -C php-fpm --user wordpress_user -o rss= | awk '{ sum += $1; count++ } END { if (count > 0) printf ("%d%s\n", sum/NR/1024,"M") }'16.10.2. Configuration du gestionnaire de processus OnDemand
Section intitulée « 16.10.2. Configuration du gestionnaire de processus OnDemand »Pour la plupart des sites WordPress, le gestionnaire de processus “ondemand” est optimal :
cd /etc/php/8.3/fpm/pool.d/sudo vim example.com.confMettez à jour les paramètres du gestionnaire de processus :
; Utiliser le gestionnaire de processus ondemandpm = ondemand
; Définir max_children selon : (RAM totale - RAM réservée) / Taille moyenne du processus; Exemple : (2048Mo - 512Mo) / 50Mo = 30pm.max_children = 30
; Terminer les processus inactifs après 10 secondespm.process_idle_timeout = 10s
; Redémarrer les processus après avoir traité 500 requêtespm.max_requests = 500Appliquez les modifications :
sudo systemctl reload php8.3-fpm16.10.3. Surveillance des limites PHP-FPM
Section intitulée « 16.10.3. Surveillance des limites PHP-FPM »Vérifiez si vos processus PHP-FPM atteignent les limites :
sudo grep max_children /var/log/php8.3-fpm.logSi vous voyez cet avertissement, augmentez votre paramètre pm.max_children :
WARNING: [pool www] server reached max_children setting (25), consider raising it16.11. Intégration Cloudflare
Section intitulée « 16.11. Intégration Cloudflare »Cloudflare est un réseau de diffusion de contenu (CDN) et un service de sécurité qui peut améliorer significativement les performances et la sécurité de WordPress.
16.11.1. Avantages de Cloudflare
Section intitulée « 16.11.1. Avantages de Cloudflare »- CDN mondial : Sert le contenu mis en cache depuis des centres de données dans le monde entier
- Protection DDoS : Atténue les attaques par déni de service distribué
- Pare-feu applicatif web : Bloque les vecteurs d’attaque courants
- SSL/TLS : Fournit des certificats SSL gratuits et des connexions TLS optimisées
- Optimisation d’images : Optimise automatiquement les images pour un chargement plus rapide
16.11.2. Configuration de Nginx pour Cloudflare
Section intitulée « 16.11.2. Configuration de Nginx pour Cloudflare »Pour garantir une journalisation correcte des adresses IP des visiteurs lors de l’utilisation de Cloudflare, vous devez configurer Nginx pour reconnaître les adresses IP de Cloudflare :
cd /etc/nginx/includessudo vim cloudflare_ip_list.confAjoutez les plages IP de Cloudflare :
# Plages IP Cloudflare# Dernière mise à jour OCT 2022 - Vérifiez https://www.cloudflare.com/ips pour les mises à jourset_real_ip_from 173.245.48.0/20;set_real_ip_from 103.21.244.0/22;set_real_ip_from 103.22.200.0/22;set_real_ip_from 103.31.4.0/22;set_real_ip_from 141.101.64.0/18;set_real_ip_from 108.162.192.0/18;set_real_ip_from 190.93.240.0/20;set_real_ip_from 188.114.96.0/20;set_real_ip_from 197.234.240.0/22;set_real_ip_from 198.41.128.0/17;set_real_ip_from 162.158.0.0/15;set_real_ip_from 104.16.0.0/13;set_real_ip_from 104.24.0.0/14;set_real_ip_from 172.64.0.0/13;set_real_ip_from 131.0.72.0/22;set_real_ip_from 2400:cb00::/32;set_real_ip_from 2606:4700::/32;set_real_ip_from 2803:f800::/32;set_real_ip_from 2405:b500::/32;set_real_ip_from 2405:8100::/32;set_real_ip_from 2a06:98c0::/29;set_real_ip_from 2c0f:f248::/32;real_ip_header CF-Connecting-IP;Incluez ce fichier dans la configuration Nginx de votre site :
cd /etc/nginx/sites-available/sudo vim example.com.confAjoutez cette ligne à votre bloc serveur :
include /etc/nginx/includes/cloudflare_ip_list.conf;Appliquez les modifications :
sudo nginx -tsudo systemctl reload nginx16.11.3. Paramètres Cloudflare recommandés pour WordPress
Section intitulée « 16.11.3. Paramètres Cloudflare recommandés pour WordPress »Après vous être inscrit sur Cloudflare et avoir pointé votre domaine vers leurs serveurs de noms :
- SSL/TLS : Définissez à “Full” ou “Full (Strict)” si vous avez un certificat SSL valide
- Mise en cache :
- Définissez le niveau de mise en cache à “Standard”
- Activez “Always Online”
- Définissez le TTL du cache navigateur à au moins 4 heures
- Vitesse :
- Activez Auto Minify pour HTML, CSS et JavaScript
- Activez la compression Brotli
- Activez Early Hints
- Activez Rocket Loader pour JavaScript
- Règles de page :
- Créez une règle pour contourner le cache pour
/wp-admin/* - Créez une règle pour contourner le cache pour les pages de connexion et de paiement
- Créez une règle pour contourner le cache pour
16.12. Conclusion
Section intitulée « 16.12. Conclusion »L’optimisation des performances WordPress est une approche multicouche qui implique :
- Optimisations au niveau serveur : Réglage de PHP-FPM, configuration d’OPcache
- Configuration WordPress : Révisions des articles, limites de mémoire, WP-Cron
- Stratégies de mise en cache : Mise en cache de pages, mise en cache d’objets, mise en cache du navigateur
- Diffusion de contenu : Intégration CDN avec Cloudflare
N’oubliez pas que l’optimisation des performances est un processus continu. Surveillez régulièrement les performances de votre site avec des outils tels que :
- Google PageSpeed Insights
- GTmetrix
- WebPageTest
Ajustez votre stratégie d’optimisation en fonction des besoins spécifiques de votre site WordPress et de vos schémas de trafic.