Découvrez NGINX : un serveur Web puissant et polyvalent

Qu'est-ce que NGINX ?

NGINX est le serveur Web le plus utilisé au monde. Il est écrit en C.

Il a été créé par Igor Sysoev en 2002 pour résoudre la difficulté des serveurs Web d'accepter un grand nombres de connexions simultanées en conservant une empreinte mémoire basse.

Il a été publié en open source en 2004.

NGINX est ensuite devenue une entreprise à part entière en 2011, qui a été rachetée en 2019 par F5. Elle propose un très grand nombre de produits : NGINX Plus, NGINX Ingress Controller, NGINX App Protect, NGINX Management Suite etc. Elle offre également du support commercial avec les équipes techniques.

Voici une vue sur leurs produits aujourd'hui :

""

Cette formation portera sur NGINX open source et NGINX amplify. Ce sont des produits gratuits qui suffisent dans la très grande majorité des cas si on sait bien les configurer : ce qui est exactement l'objet de la formation.

NGINX open source peut en outre être étendu avec un très grand nombre de modules permettant d'ajouter des fonctionnalités très avancées (par exemple compression Brotli).

Cas d'utilisation de NGINX

Serveur Web

Un serveur Web est un serveur physique (une machine qui stocke, traite et fournit des fichiers de sites web aux navigateurs Web), mais c'est aussi un logiciel qui distribue du contenu en répondant à des requêtes de clients.

Le plus souvent, le client est un navigateur Web qui cherche à consulter des contenus.

La communication entre le serveur Web et le client peut se faire à l'aide de plusieurs protocoles, dont les principaux sont :

  • HTTP (Hypertext Transfer Protocol) pour les contenus statiques (images, feuilles de style, pages HTML, fichiers texte etc) ou dynamique (contenus générés par des applications serveurs comme par exemple une application Node.js).
  • SMTP (Simple Mail Transfer Protocol) pour les courriels (mais aussi POP3 et IMAP).

NGINX prend en charge tous les protocoles nécessaires pour les serveurs Web modernes (HTTPS, gRPC, WebSocket, SMTP, POP3, IMAP etc).

Il peut également servir des flux vidéos -streaming- (avec par exemple les formats HDS, HLS ou RTMP).

Proxy inverse (reverse proxy)

Un proxy, souvent appelé serveur proxy ou proxy web, désigne un serveur situé entre un groupe d'ordinateurs clients et le réseau public (Internet). Lorsque ces clients envoient des requêtes envoyées à des sites sur Internet, le serveur proxy intercepte ces requêtes et communique ensuite avec les serveurs Web au nom des clients. Il agit comme un intermédiaire (d'où le nom de proxy).

Un proxy inverse désigne un serveur placé entre les clients envoyant des requêtes et un ou plusieurs serveurs Web. Il envoie alors des requêtes aux serveurs d'origine et reçoit des réponses de ce dernier.

Serveurs proxies inverses vs serveurs proxies avancés

Voici un schéma reprenant l’utilisation de NGINX comme un proxy inverse :

Dans le schéma nous avons des clients qui accèdent à NGINX qui est l'unique point d'entrée et est utilisé comme un proxy inverse. Il répartit ensuite les requêtes sur des serveurs d'applications, eux-mêmes connectés à une base de données.

Les serveurs d'applications génèrent les contenus dynamiques en fonction des requêtes des clients. Ils utilisent par exemple Java, Node.js, Symfony ou Django.

Les avantages d'un proxy inverse sont très nombreux, comme nous le verrons. Mais citons quelques avantages dès maintenant :

  • plus sécurisé d'avoir une seule adresse IP publique.
  • plus facile de sécuriser un seul point d'entrée : par exemple il devient facile de limiter le nombre de requêtes (par exemple pour empêcher les attaques DDOS).
  • mise en place d'un équilibrage des charges (load balancing).
  • router backend (distribuer les requêtes vers les bons serveurs d'applications, microservices etc).
  • terminaison TLS (par exemple pour l'analyse du trafic en clair par des outils de sécurité sur un réseau privé avant qu'il n'atteigne les serveurs d'application ou pour mettre la charge cryptographique uniquement sur le point d'entrée NGINX et moins charger les serveurs d'application).
  • l'accélération Web (compression et mise en cache du contenu pour améliorer les performances).

Passerelle d'API (API Gateway)

Une passerelle d'API est une sous-catégorie des proxys inverses. Nous préférons vous l'expliquer car vous rencontrerez souvent ce terme.

Une passerelle API accepte les demandes (requêtes d'API) d'un client et les achemine vers les microservices appropriés.

Les avantages sont identiques que ceux que nous avons vu pour les proxys inverses. Il permet en plus, dans le contexte de la consommations de microservices :

  • d'authentifier les requêtes qui effectuent les appels d'API
  • de vérifier si la requête est autorisée à accéder à un ou plusieurs microservices
  • appliquer des limites de débit pour éviter la surcharge des services et les éventuelles attaques DDOS.

Utilisation de NGINX

NGINX est l'image Docker la plus utilisée au monde. C'est également le serveur Web le plus utilisé par les 10 000 sites les plus fréquentés au monde.

Plus de 300 millions de sites l'utilisent, notamment : Dropbox, Netflix, Canal+, Hulu, Pinterest, CloudFlare, Airbnb, WordPress.com, GitHub, SoundCloud, Zynga, Eventbrite, Zappos, Media Temple, Heroku, etc.

Comparaison avec Apache

Apache n’est plus tout jeune. Cette technologie de serveur Web date de 1995.

Son modèle est que chaque connexion est gérée par un processus distinct. Cela entraîne que pour 100 connexions, il faut 100 processus qui consomment chacun de la mémoire.

Cela provoque également de très nombreuses failles de sécurité (recherchez des vidéos Youtube sur les attaques slowlorris, slowhttprequest, apache DDoS etc si vous êtes intéressé).

NGINX a été créé spécifiquement en pour “pour répondre aux limitations de performance des serveurs Web Apache”.

Son modèle est event driven, c’est-à-dire orienté événement. Un même processus peut gérer plusieurs milliers de connexions simultanées.

L’utilisation d’NGINX a complètement explosé, par exemple pour le directeur des services d’information de Salesforce, Chris Lea :

Apache est comme Microsoft Word. Il a un million d’options mais vous n’en avez besoin que de 6. NGINX fait 6 choses, il fait 5 d’entre elles 50 fois mieux qu’Apache”.

Aujourd’hui Apache s’est complètement effondré au profit d'NGINX, et cela continuera pour les années à venir :

C’est encore plus vrai si l’on considère les 1000 sites les plus fréquentés au monde, 47.6% pour NGINX 17.6% pour Apache :

D’ailleurs, le plus grand utilisateur de PHP au monde, et qui était l'un des principaux utilisateurs d'Apache, à savoir Wordpress, utilise uniquement NGINX et a totalement abandonné Apache. Ils utilisent plus de 1000 serveurs avec 36 load balancers NGINX. Ils utilisent NGINX également pour servir tous les fichiers statiques et dynamiques. (Sources ici et ici).

Commencez dès aujourd'hui la formation la plus complète sur NGINX en vous rendant ici.