Qu’est-ce que Nginx et pourquoi les sites web en raffolent ?

Par Maxime Pfrimmer, le 16 janvier 2024

Tech

Si je vous dis IBM, Netflix, Dropbox ou encore X, à quoi est-ce que vous pensez ?

Aux gigantesques quantités de data que ces géants amassent ? Peut-être.

Aux myriades de plateformes qu’ils utilisent pour les collecter ? Peut-être.

Tous ces géants ont un point en commun : ils utilisent tous le même serveur web, Nginx ( à prononcer “Engine X”).

Et ils ne sont pas les seuls. Selon W3techs.com, 34.1 % des sites web s’appuient sur Nginx pour gérer leurs requêtes ou servir d’API.

Alors, naturellement, nous nous sommes demandés qu’est-ce qui se cache derrière ce succès fou ?

D’autant qu’à la base, Nginx n’est qu’un petit moteur développé par un ingénieur russe en solo dans son coin.

À quoi est-ce qu’il sert ? Comment est-ce qu’il fonctionne ? Pourquoi est-ce que les créateurs de sites web le préfèrent à Apache ? Et enfin, est-ce que vous devez vous aussi l’utiliser ?

On vous dévoile tout dans cet article.

Bonne lecture 😊

Les origines de Nginx : un problème à 10 000 connexions

serveurs

Tout comme l’intelligence artificielle a chamboulé notre quotidien en 2023, l’arrivée de Nginx sur le marché a été un vrai game-changer.

Pour comprendre pourquoi, remontons l’histoire de Nginx.

Son histoire commence 20 ans après le début d’internet. Plus précisément vers sa démocratisation dans les années 90.

À cette époque, de plus en plus de personnes arpentent les routes du web grâce à leurs navigateurs web.

Sauf qu’il y a eu imprévu : la capacité des serveurs à router les requêtes entrantes ne suivaient pas la cadence.

Dès que 10 000 connexions simultanées arrivaient sur un seul serveur, ça entraînait un bug.

Toutes les compagnies ont donc cherché à améliorer leurs hardwares… sans succès.

Et la raison de leurs échecs à surmonter ce problème a été mise en évidence en 1999 dans l’article « The C10K Problem » de Dan Kegel.

Dans cet article, l’ingénieur démontre que le hardware n’est pas la raison principale qui empêche les sites web de gérer 10 000 visiteurs en même temps.

La cause vient plus tôt du mauvais usage des ressources des serveurs par les systèmes d’exploitation.

3 ans plus tard, en 2002, en plein cœur de la Russie, la société éditrice du moteur de recherche Rambler – un des sites web les plus fréquentés de Russie avec 64.19 M de visiteurs en novembre 2023 – embauche un développeur.

Sa mission est simple : aider le site à gérer l’afflux massif d’internautes russes pour faire face à la popularité croissante du service.

Et Igor n’y va pas par 4 chemins. Après deux ans d’efforts acharnés, il crée un logiciel open-source pour gérer le trafic de Rambler : Nginx.

Son logiciel n’a qu’un objectif : offrir le maximum de performance,de stabilité et optimiser les performances à l’échelle.

Au moment où nous écrivons cet article, nous sommes le 27 décembre 2023.

Et lorsqu’on regarde les statistiques, c’est sans appel : NGINX est LE logiciel de serveur web le plus utilisé.

Pourcentage d'utilisation des différents serveurs web au monde en juin 2023
Pourcentage d’utilisation des différents serveurs web au monde en décembre 2023

 

Source : W3techs.com

Pourcentage d'utilisation des différents serveurs web au monde en juin 2023
Pourcentage d’utilisation des différents serveurs web au monde en juin 2023

Pourcentage d’utilisation des différents serveurs web au monde en juin 2023

Même des logiciels sous licence appartenant aux GAFAM comme Microsoft-IIS n’arrivent pas à le concurrencer.

Maintenant, rentrons plus en détails dans ce qu’est vraiment NGINX.

Qu’est-ce que NGINX et comment est-ce qu’il fonctionne ?

Nginx est un logiciel type serveur web open-source dont les maîtres mots sont performance, utilisation la plus efficace possible des ressources des serveurs et rapidité.

Nginx est conçu pour utiliser très peu de mémoire et maximiser la simultanéité. Et cette souplesse plaît énormément aux équipes de développement web et mobiles qui l’utilisent aussi comme :

  • Proxy inverse ;
  • Cache HTTP ;
  • Équilibreur de charge, etc.

La particularité de Nginx vient de son mode de fonctionnement.

Ainsi, contrairement à la plupart des autres serveurs du marché qui sont multi-processus – un visiteur = un nouveau processus – Nginx est mono-processus.

Tout le trafic est géré dans un seul processus qui utilise une architecture maître-esclave. De plus, l’outil open-source repose aussi sur une approche asynchrone et évènementielle.

Cette conception logicielle atypique lui permet d’exécuter plusieurs requêtes simultanément sans craindre l’interblocage des processus (ou deadlock).

En effet, un deadlock ne se produit que si plusieurs processus concurrents souhaitent accéder à la même ressource non-partageable en même temps. En attendant d’y accéder, chacun conserve un accès exclusif à une ressource convoitée par un autre processus.

Raison pour laquelle Nginx est plébiscité par les développeurs lors de la conception d’une plateforme digitale validant ces conditions :

  • la plateforme web ou l’app mobile reçoit énormément de requêtes HTTPS entrantes ;
  • des contenus statiques doivent être massivement distribués ;
  • le nombre de requêtes simultanées attendues est élevé.

Autre cas d’usage de Nginx : il peut servir d’API entre vos différents micro-services.

Pour terminer, voici quelques caractéristiques notables de Nginx :

  • Proxy inversé avec mise en cache ;
  • IPv ;
  • Équilibrage de charge ;
  • TLS/SSI avec SNI.

Tout ceci grâce à l’architecture maître-esclave. Et justement, parlons-en de cette architecture.

Comment fonctionne l’architecture de NGINX ?

Comme dit plus haut, Nginx repose sur une architecture maître-esclave asynchrone et sur des modèles événementiels non-bloquants.

Concrètement, voici comment une instance de Nginx fonctionne :

  • les travailleurs acceptent de nouvelles requêtes HTTP/HTTPS entrantes à partir d’un socket partagé.
  • À l’intérieur de chaque travailleur, une boucle est effectuée, permettant à chacun de traiter des milliers de requêtes sans bloquer les autres ;
  • les processus maîtres coordonnent l’exécution des tâches des travailleurs en créant et en gérant des sockets.

De plus, pour diminuer les temps d’accès aux fichiers, les chargeurs de cache des proxys ajoutent les données dans la mémoire tampon du moteur. Ainsi, même si le navigateur client est lent, son maigre débit ne va pas ralentir le proxy.

Ce fonctionnement présente 2 différences majeures avec le second serveur web le plus utilisé Apache :

  1. Nginx a une architecture mono-thread alors qu’Apache a une architecture multi-processus. De plus, la version mono-thread d’Apache, Apache Tomcat, ne peut gérer qu’une seule connexion ;
  2. Son fonctionnement fait qu’il est plus rapide qu’Apache pour distribuer des contenus statiques. Par contre, ça l’empêche aussi de prendre en charge nativement les contenus dynamiques. Par conséquent, les développeurs d’applications utilisant Nginx sont forcés d’utiliser un service tiers pour cela. Ce qui n’est pas le cas d’Apache.

5 bonnes raisons d’adopter Nginx

S’il vous fallait 5 raisons d’utiliser Nginx, les voici :

  • réduire le temps de chargement de vos sites web et éviter les problèmes de latence ;
  • la possibilité de faire des mises à jour à la volée sans avoir à interrompre vos services ;
  • sa capacité à servir de proxy inverse et à dispatcher le trafic entre plusieurs serveurs et clients de manière fluide via des algorithmes de routage intelligents ;
  • le fait d’avoir peu de composants à gérer ;
  • l’augmentation de la vitesse globale de vos services.

Maintenant, voyons pourquoi les hébergeurs web l’adorent.

Pourquoi les hébergeurs adorent NGINX (3+1 raison)

Vous vous souvenez lorsque nous avons des graphes plus haut ?

Ceux montrant la moyenne des parts de marché de Nginx dans les sites web ?

En réalité, ils cachent une grande disparité.

Jugez de vous-même via ce graphique fourni par w3Techs.com :

Répartition des serveurs web entre Nginx et Apache selon leur trafic le 27 décembre 2023
Répartition des serveurs web entre Nginx et Apache selon leur trafic le 27 décembre 2023

Vous avez remarqué la différence entre les deux serveurs ?

Réponse : Nginx est de plus en plus utilisé à mesure que le trafic des sites web pris en compte est élevé.

Pour le top 1.000.000 des plateformes les plus visitées, Nginx représente 31.9% des parts de marché, contre 22.8 % pour Apache web server.

Dès qu’on atteint le top 100.000 des plateformes les plus visitées, Nginx croît jusqu’à atteindre 32 % alors qu’Apache recule à 17.6 %.

Et ainsi de suite.

Si les applications web à fort trafic comme Netflix ou le CMS WordPress, les hébergeurs comme OVH et des gestionnaires de CDN, misent sur Nginx, c’est pour 4 raisons :

  • les performances hors normes à l’échelle offertes par l’outil ;
  • la réduction de la vulnérabilité aux attaques par force brute (DDoS) grâce à des fonctions telles que le filtrage des requêtes, le blocage des adresses IP et le contrôle des accès ;
  • la mise en cache rapide et simple ;
  • la scalabilité et la tolérance aux fautes : concrètement, vous pouvez ajouter ou retirer un micro-service sans affecter l’expérience utilisateur ;
  • le support natif pour les requêtes HTTPS, qui permettent de sécuriser les échanges clients-serveurs via le cryptage SSL/TLS ;
  • la prise en charge avec la plupart des web app ;
  • une vaste communauté et des millions de tutoriels.

Enfin, le cœur même de Nginx reste sa capacité à gérer plusieurs connexions entrantes en utilisant le moins de mémoire possible. Et là-dessus, les statistiques issues des essais sur les benchmarks ne mentent pas.

Utilisation des ressources entre Nginx et Apache
Utilisation des ressources entre Nginx et Apache

Source : https://blog.coolicehost.com/ten-great-advantages-of-nginx/

3 Manières d’utiliser NGINX pour augmenter les performances de votre site web et sa sécurité ?

Développeuse web devant deux écrans

Ok.

Si vos serveurs utilisent Nginx, il y a quelques petites astuces que vous pouvez facilement mettre en place pour booster leurs performances.

Et justement, en voici 3.

1 – Autorisez la compression Gzip

Pour comprendre à quel point la compression Gzip peut réduire la consommation de votre bande passante, revenons aux codes informatiques.

En effet, chaque page web générée par vos serveurs est constituée d’au moins 3 fichiers textes :

  • un fichier HTML (.html) décrivant le contenu de la page
  • un fichier CSS (.css) qui se charge de décrire la mise en page de… la page web
  • enfin, un fichier JavaScript (.js) qui va rajouter des animations et rendre la page un peu plus interactive

Voici un exemple de page HTML :

<!DOCTYPE html>

<html>

<head>

    <title>Exemple de code HTML</title>

</head>

<body>

    <h1>Bonjour, monde !</h1>

</body>

</html>

Il est parfaitement indenté. Lisible. Espacé. Et les différents éléments sont bien indentés.

Tout ceci n’a pour seul but que de rendre le code compréhensible par les développeurs. Mais le navigateur lui n’en a strictement pas besoin.

En réalité, il le comprendrait tout autant s’il n’y avait pas d’espace et si tout le code était placé sur une seule ligne.

On parle alors de minification.

L’intérêt de cette manœuvre : réduire le poids des fichiers textes.

Nginx va plus loin avec la compression Gzip. Ici, une fenêtre de 32 000 caractères est scannée par l’algorithme « Deflate » de Gzip et repère tous les caractères redondants dans le fichier.

Fonctionnement de l'algorithme Deflate
Fonctionnement de l’algorithme Deflate

Ensuite, il parcourt tout le fichier et remplace lesdits caractères par une référence vers le premier caractère rencontré.

Oui, c’est un peu technique, mais le résultat en vaut largement la peine : vous pouvez faire baisser le poids de vos fichiers de 70 %.

Et ça marche aussi sur des données non-textuelles.

D’ailleurs, les outils de tests de vitesses priorisent les sites ayant activé la compression Gzip. Google les positionne même plus haut dans ses classements SEO.

Pour activer la compression Gzip, connectez-vous à votre logiciel serveur ftp avec les droits administrateurs.

Allez dans le sous-répertoire /etc/nginx/nginx.conf en tapant la commande cd/etc/nginx.

Si vous n’avez pas la configuration par défaut, tapez sudo find / -name nginx.conf dans le terminal.

Une fois à l’intérieur du fichier de configuration nginx.conf, entrez les commandes suivantes :

gzip on; 

gzip_vary on; 

gzip_min_length 1024; 

gzip_proxied expired no-cache no-store private auth; 

gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; 

gzip_disable "MSIE [1-6]\.";

Maintenant, place à l’astuce n°2.

2 – Autorisez le support http/2

Le protocole HTTP – ou HyperText Transfer Protocol – est le protocole client-serveur qui vous permet d’afficher vos pages web.

À noter que désormais, c’est sa variante sécurisée, HTTPS qui est recommandée. Si vous ne la mettez pas en place, les moteurs de recherche vont afficher une page d’avertissement menaçante à tous vos visiteurs.

Autant dire que votre trafic et vos conversions vont en pâtir.

Depuis peu, la version HTTP/2 est disponible. Plus sécurisée et plus performante, elle vous permet d’obtenir de meilleures performances en quelques lignes.

Pour l’activer, voici ce que vous devez faire :

  • vérifiez que la version Nginx installée sur votre système d’exploitation est compatible ;
  • activez l’encodage SSL/TLS sur votre site web ;
  • redémarrez Nginx ;

Voyons ça plus en détail.

1 – Vérifiez votre version de Nginx

Si votre version de Nginx est inférieure à la version 1.9.5, vous devrez d’abord faire une mise à jour de celle-ci.

Pour connaître la version Nginx de votre système, tapez la commande suivante :

Nginx -v

Vous êtes à la version 1.9.5 ou plus ? Félicitations, vous pouvez activer HTTP/2.

2 – Autorisez l’encodage SSL/TLS 

Contrairement à HTTP/1 qui ne nécessitait pas de chiffrement SSL/TLS, HTTP/2 l’exige. Son objectif étant de sécuriser au maximum les transactions entre vos serveurs web et les navigateurs de vos lecteurs.

Et pour l’activer, vous aurez besoin d’un certificat SSL. Pas de panique, vous pouvez en obtenir un gratuitement via Google Domains.

Une fois que vous en avez un, saisissez juste ces lignes de codes dans votre fichier de configuration Nginx :

server {

   listen 443 ssl http2;

   server_name “votre nom de domaine” ;

   ssl_certificate /path/to/ssl/certificate;

   ssl_certificate_key /path/to/ssl/private/key;

   ...

}

Quelques explications :

  • ssl_certificate fait référence au chemin vers votre certificat SSL/TLS ;
  • ssl_certificate_key fait de même, mais pour votre clé privée.

Enfin, il est l’heure de vérifier si ça a fonctionné.

3 – Testez votre nouvelle configuration et redémarrer Nginx

Pour tester votre configuration et être sûr que tout fonctionne à merveille, exécuter la commande suivante :

Nginx -t

Si tout est bien paramétré, vous verrez un message vous affichant que tout va bien.

Ensuite, redémarrez Nginx pour rendre vos changements définitifs grâce à la commande :

Sudo service nginx restart.

3 – Désactivez les protocoles SSL/TLS dépréciés

Toutes les versions de chiffrement TLS ne se valent pas.

Ainsi, TLS 1.0 et 1.1 sont des versions obsolètes et vulnérables aux attaques de types BEAST, POODLE et CRIME SSL.

Raison pour laquelle la plupart des navigateurs ne les prennent plus en charge.

Heureusement, c’est une modification assez facile à faire.

Ouvrez une fois de plus votre fichier de configuration Nginx et saisissez la commande suivante :

ssl_protocols TLSv1.2 TLSv1.3;

Notre mot de la fin

Ça y est !

Vous savez tout ce qu’il y a à savoir sur Nginx.

Maintenant, vous vous demandez sûrement si vous devez utiliser Nginx ou pas. Est-ce que ce serveur est adapté à votre projet numérique ?

Heureusement, on peut vous aider à répondre à cette question.

Laissez un message à notre chef de projet informatique et notre agence de développement web vous aidera à choisir la solution la plus adaptée.


Partager l'article

Notre blog

En savoir plus