Optimiser la configuration de Nginx pour les sites web à fort trafic

utilisation de Nginx pour optimiser les performances du site web en cas de trafic élevé debian ubuntu

Nginx est un serveur web open-source populaire et un proxy inverse qui est largement utilisé pour servir des sites web à fort trafic. Afin d’optimiser la configuration de Nginx pour les sites web à fort trafic, il existe plusieurs bonnes pratiques à suivre. Dans cet article, nous allons discuter de certaines de ces bonnes pratiques.

Comprendre les schémas de trafic

La première étape de l’optimisation de la configuration de Nginx pour les sites web à fort trafic consiste à comprendre vos schémas de trafic. Vous devez connaître le nombre de requêtes que votre serveur reçoit et les types de requêtes qu’il reçoit. Vous devez également connaître les heures de pointe du trafic et la répartition géographique de vos visiteurs.

Ces informations vous aideront à déterminer le matériel et la configuration de serveur appropriés pour gérer votre trafic. Par exemple, si vous avez un volume élevé de demandes, vous devrez peut-être augmenter le nombre de processus de travail et de connexions que Nginx peut gérer.

Optimisez votre matériel de serveur

Les performances de votre serveur Nginx dépendent fortement du matériel sur lequel il fonctionne. Pour optimiser la configuration de Nginx pour les sites web à fort trafic, vous devez vous assurer que le matériel de votre serveur est à la hauteur.

Vous devez choisir un serveur doté d’un processeur rapide, de beaucoup de mémoire vive et d’un espace de stockage rapide. Les disques SSD sont recommandés car ils offrent des vitesses de lecture et d’écriture beaucoup plus rapides que les disques durs traditionnels. Vous devriez également envisager d’utiliser plusieurs serveurs pour répartir la charge et assurer la redondance.

Optimiser la configuration de Nginx

Une fois que vous avez optimisé le matériel de votre serveur, il est temps d’optimiser votre configuration Nginx. Voici quelques conseils pour vous aider à optimiser votre configuration Nginx pour les sites web à fort trafic :

Note :
Vous pouvez trouver le fichier de configuration dans /etc/nginx/nginx.conf pour la configuration globale
et les configurations de vos sites web devraient être dans /etc/ngnix/sites-enabled/
Assurez-vous de redémarrer / recharger Nginx après avoir modifié vos paramètres :

Recharger le serveur sans temps d’arrêt :

$ sudo ngnix -s reload

Redémarrer le service nginx :

$ sudo systemctl restart nginx

Augmenter le nombre de processus et de connexions des travailleurs

Pour augmenter le nombre de processus de travail et de connexions, vous pouvez ajouter les directives suivantes au fichier de configuration de Nginx :

worker_processes auto;
worker_rlimit_nofile 100000;
events {
    worker_connections 100000;
}
  • worker_processes: Cette directive définit le nombre de processus de travail. La valeur auto indique à Nginx de déterminer automatiquement le nombre optimal de processus travailleurs en fonction du nombre de cœurs de CPU disponibles.
  • worker_rlimit_nofile: Cette directive définit le nombre maximum de descripteurs de fichiers que chaque processus ouvrier peut ouvrir. Cette valeur doit être suffisamment élevée pour tenir compte du nombre de connexions gérées par votre serveur.
  • events: Ce bloc spécifie le mécanisme de gestion des événements utilisé par Nginx. La directive worker_connections définit le nombre maximum de connexions que chaque processus worker peut gérer.

Utiliser la compression Gzip

Pour activer la compression Gzip, vous pouvez ajouter la directive suivante au fichier de configuration de Nginx :

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  • gzip: Cette directive active la compression Gzip.
  • gzip_types: Cette directive spécifie les types MIME des fichiers qui doivent être compressés. L’exemple ci-dessus spécifie les types de fichiers texte courants ainsi que les fichiers JSON et JavaScript.

Utiliser la mise en cache

Pour activer la mise en cache, vous pouvez utiliser le module de mise en cache intégré de Nginx ou un proxy de mise en cache tel que Varnish. Voici un exemple d’activation de la mise en cache côté serveur à l’aide du module de mise en cache intégré de Nginx :

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
    ...
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 60m;
        proxy_cache_valid any 10m;
        ...
    }
}
  • proxy_cache_path: Cette directive définit le chemin et les paramètres du cache.
  • proxy_cache: Cette directive active la mise en cache pour l’emplacement spécifié.
  • proxy_cache_valid: Cette directive définit la validité des réponses mises en cache. Dans l’exemple ci-dessus, les réponses ayant un code d’état de 200 sont mises en cache pendant 60 minutes, et toutes les autres réponses sont mises en cache pendant 10 minutes.

Utiliser le cryptage SSL/TLS

Pour activer le cryptage SSL/TLS, vous pouvez utiliser l’exemple suivant :

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate.key;
    ...
}
  • listen: Cette directive spécifie le port et le protocole d’écoute. Dans cet exemple, 443 est le port HTTPS.
  • server_name: Cette directive spécifie le nom d’hôte auquel le serveur répond.
  • ssl_certificate: Cette directive indique le chemin d’accès au fichier de certificat SSL/TLS.
  • ssl_certificate_key: Cette directive indique le chemin d’accès au fichier de clé privée SSL/TLS.

Il ne s’agit là que de quelques exemples de la manière dont vous pouvez optimiser votre configuration Nginx pour les sites web à fort trafic. Il existe de nombreuses autres optimisations que vous pouvez effectuer, en fonction des exigences spécifiques de votre site web et de l’environnement de votre serveur.

Utiliser HTTP/2

HTTP/2 est une nouvelle version du protocole HTTP qui offre plusieurs améliorations par rapport à HTTP/1.1, telles que le multiplexage, la poussée du serveur et la compression des en-têtes. Pour activer HTTP/2, vous pouvez utiliser l’exemple suivant :

server {
    listen 443 ssl http2;
    ...
}
  • http2: Cette directive active la prise en charge de HTTP/2.

Optimiser la configuration SSL/TLS

Vous pouvez optimiser votre configuration SSL/TLS en utilisant des algorithmes de chiffrement modernes, en désactivant les protocoles non sécurisés et en activant le secret de transmission. Voici un exemple :

ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_dhparam /path/to/dhparam.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
  • ssl_protocols: Cette directive spécifie les protocoles SSL/TLS à utiliser. Dans cet exemple, seul le protocole TLS 1.2 est autorisé.
  • ssl_prefer_server_ciphers: Cette directive indique au serveur d’utiliser son système de chiffrement préféré plutôt que celui du client.
  • ssl_ciphers: Cette directive définit la liste des algorithmes de chiffrement à utiliser. L’exemple ci-dessus spécifie une liste de chiffrements forts qui offrent un secret parfait (PFS).
  • ssl_dhparam: Cette directive définit le chemin d’accès au fichier des paramètres Diffie-Hellman (DH). Cette directive est nécessaire pour activer PFS.
  • ssl_session_cache: Cette directive définit le cache de session SSL. L’exemple ci-dessus utilise un cache partagé qui peut contenir jusqu’à 10 mégaoctets de données.
  • ssl_session_timeout: Cette directive définit la durée maximale pendant laquelle une session peut être mise en cache.
  • ssl_stapling: Cette directive active l’agrafage SSL, qui permet au serveur de fournir une réponse OCSP signée et horodatée avec son certificat.
  • ssl_stapling_verify: Cette directive indique au serveur de vérifier la réponse OCSP du client.
  • resolver: Cette directive définit l’adresse IP du résolveur DNS utilisé pour la validation OCSP.

Utiliser la mise en cache FastCGI

La mise en cache FastCGI peut être utilisée pour mettre en cache le contenu dynamique servi par les applications FastCGI. Voici un exemple :

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
    ...
    location / {
        fastcgi_pass unix:/path/to/fastcgi.sock;
        include fastcgi_params;
        fastcgi_cache my_cache;
        fastcgi_cache_valid 200 60m;
        fastcgi_cache_valid any 10m;
        ...
    }
}
  • fastcgi_cache_path: Cette directive définit le chemin et les paramètres du cache.
  • fastcgi_pass: Cette directive définit l’adresse de l’application FastCGI.
  • fastcgi_cache: Cette directive active la mise en cache pour l’emplacement spécifié.
  • fastcgi_cache_valid: Cette directive définit la validité des réponses mises en cache. Dans l’exemple ci-dessus, les réponses ayant un code d’état de 200 sont mises en cache pendant 60 minutes, et toutes les autres réponses sont mises en cache pendant 10 minutes.

Régler les paramètres de PHP-FPM

PHP-FPM dispose d’un certain nombre de paramètres de configuration que vous pouvez ajuster pour améliorer les performances. Ces paramètres se trouvent généralement dans le fichier php-fpm.conf ou dans le fichier www.conf, en fonction de votre installation.

Voici quelques paramètres que vous pourriez envisager de régler :

  • pm.max_children: Ce paramètre contrôle le nombre maximum de processus PHP pouvant être exécutés simultanément. L’augmentation de cette valeur peut aider à gérer plus de requêtes simultanées, mais elle consomme également plus de ressources.
  • pm.start_servers: Ce paramètre contrôle le nombre de processus PHP qui sont démarrés lorsque PHP-FPM est lancé pour la première fois. L’augmentation de cette valeur peut aider à réduire la latence pour les premières requêtes.
  • pm.min_spare_servers and pm.max_spare_servers: Ces paramètres contrôlent le nombre minimum et maximum de processus PHP inactifs qui doivent être maintenus en activité pour traiter les requêtes entrantes.
  • pm.max_requests: Ce paramètre contrôle le nombre de requêtes que chaque processus PHP peut traiter avant d’être interrompu. Cela permet d’éviter les fuites de mémoire et d’autres problèmes.

Utiliser la mise en cache des opcodes

La mise en cache des opcodes peut améliorer de manière significative les performances de PHP en mettant en cache le bytecode compilé des scripts PHP, réduisant ainsi le temps nécessaire à leur exécution. Il existe plusieurs extensions de mise en cache d’opcode disponibles pour PHP, notamment APCu, OpCache et XCache.

Pour utiliser la mise en cache des opcodes avec PHP-FPM, vous devez la configurer dans le fichier php.ini. Voici un exemple de configuration pour OpCache :

[opcache]
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
opcache.revalidate_freq=60
[PHP]
max_execution_time = 60
memory_limit = 512M
post_max_size = 100M
upload_max_filesize = 100M
max_input_vars = 10000
  • opcache.enable: Ce paramètre active l’extension OpCache. Réglez-le à 1 pour activer l’OpCache.
  • opcache.memory_consumption: Ce paramètre définit la quantité de mémoire qu’OpCache utilisera pour stocker le bytecode compilé. La valeur par défaut est de 64 Mo, mais vous devrez peut-être l’augmenter en fonction de la taille de votre application. Dans cet exemple, nous l’avons fixé à 256 Mo.
  • opcache.max_accelerated_files: Ce paramètre définit le nombre maximum de fichiers qui peuvent être stockés dans le cache des opcodes. Par défaut, il est fixé à 2000, mais vous devrez peut-être l’augmenter si vous avez un grand nombre de fichiers PHP. Dans cet exemple, nous l’avons fixé à 10000.
  • opcache.validate_timestamps: Ce paramètre détermine si OpCache vérifie les horodatages des fichiers PHP pour voir s’ils ont été modifiés depuis la dernière fois qu’ils ont été mis en cache. Par défaut, il est fixé à 1, ce qui signifie qu’OpCache vérifiera les horodatages. Cependant, la vérification des horodatages peut être coûteuse, il est donc recommandé de la fixer à 0 dans les environnements de production où les fichiers ne changent pas fréquemment.
  • opcache.revalidate_freq: Ce paramètre détermine la fréquence à laquelle OpCache vérifiera les horodatages des fichiers PHP lorsque opcache.validate_timestamps est réglé sur 1. La valeur est exprimée en secondes, et la valeur par défaut est de 2 secondes. Dans cet exemple, nous l’avons fixé à 60 secondes, ce qui signifie qu’OpCache vérifiera les horodatages une fois par minute.

Quelques paramètres supplémentaires qui peuvent améliorer les performances de PHP pour un site web à fort trafic.

  • max_execution_time: Ce paramètre contrôle la durée maximale (en secondes) pendant laquelle un script PHP peut s’exécuter avant d’être interrompu. Pour un site web à fort trafic, vous pouvez définir cette valeur à 60 ou plus, en fonction des besoins de votre application.
  • memory_limit: Ce paramètre contrôle la quantité de mémoire que PHP peut utiliser. Pour un site web à fort trafic, il est préférable de fixer cette valeur à 512M ou plus, en fonction de la taille et de la complexité de votre application.
  • post_max_size and upload_max_filesize: Ces paramètres contrôlent la taille maximale des données POST et des fichiers téléchargés, respectivement. Pour un site web à fort trafic qui traite des fichiers ou des données volumineux, vous pouvez définir ces valeurs à 100M ou plus.
  • max_input_vars: Ce paramètre contrôle le nombre maximum de variables d’entrée que PHP peut gérer. Pour un site web à fort trafic qui utilise des formulaires complexes ou des données d’entrée, il est préférable de fixer cette valeur à 10000 ou plus.

Encore une fois, ces valeurs ne sont que des exemples et peuvent varier en fonction de vos besoins spécifiques. Il est important de surveiller les performances de votre serveur et d’ajuster les paramètres en conséquence afin d’obtenir des performances optimales pour votre site web à fort trafic.

En configurant ces paramètres, vous pouvez optimiser les performances de PHP sur votre serveur Nginx. Gardez à l’esprit que les valeurs utilisées dans cet exemple peuvent ne pas convenir à toutes les applications, et que vous devriez les ajuster en fonction des besoins spécifiques de votre application.

Conclusion

L’optimisation de la configuration de Nginx pour les sites web à fort trafic est cruciale pour offrir une expérience utilisateur fluide et fiable. En ajustant les paramètres tels que le matériel du serveur, les configurations Nginx, les paramètres PHP-FPM et la mise en cache Opcode, vous pouvez améliorer les performances du site web en cas de trafic important. Cependant, il n’existe pas d’approche unique pour l’optimisation de la configuration de Nginx, et il est essentiel de surveiller les performances de votre site web et d’ajuster régulièrement les paramètres pour obtenir des performances optimales. Avec les bonnes optimisations et la bonne surveillance, vous pouvez vous assurer que votre site web peut gérer des volumes de trafic élevés et fournir une expérience rapide et fiable à vos utilisateurs.

Laisser un commentaire