Qu’est-ce que NGINX? Son nom laisse présager peu de choses à vrai dire. NGINX se prononce comme Engine-X.
Il s’agit d’un logiciel qui agit comme un proxy inverse. C’est à dire qu’il va se placer en amont du ou des serveurs web et prendre, à leur place, la charge des requêtes web.
D’un point de vue de sécurité, il peut être utilisé pour abstraire totalement l’accès aux ressources web qui sont sur les serveurs. Par exemple, il est possible d’associer les requêtes du serveur A et B à des URL comme http://www.monsite.com/a/ et http://www.monsite.com/b/ sans que cela ne paraisse pour le commun des mortels.
Dans la majorité de cas, un proxy inverse comme NGINX est utilisé comme un outil permettant d’augmenter la performance d’un site web. Il est possible de répartir la charge des requêtes vers une ressource statique sur plusieurs serveurs ou même de procéder à la mise en cache localement du contenu accessible à partir du web.
Il est aussi possible d’utiliser NGINX comme un proxy de serveur courriel POP3, IMAP et SMTP.
NGIX est présent sur le web depuis maintenant huit ans et est développé sous une licence libre de style BSD. Initialement, il a été développé par un développeur Russe nommé Igor Sysoev. Les premières utilisations de NGIX ont été avec les sites de premier ordre Russes comme Yandex, Mail.ru et même Rambler.
Depuis, l’utilisation de NGINX est en constante hausse. Des sites américains de haut niveau l’ont intégré dans leur architecture. On peut noter des sites comme Netflix, Pinterest et même Github.
Le principal point de vente de NGINX est sa capacité à prendre une charge considérable de requêtes simultanées avec une faible et prévisible trace en mémoire. Son architecture, basée sur des événements, lui permettant, de façon asynchrone, de gérer les requêtes entrantes. Son architecture a été conçue spécifiquement pour adresser la problématique du C10k.
Qu’est-ce que le C10k? Il s’agit du nom qui a été donné à la problématique d’optimisation des serveurs applicatifs pour leur permettre de fournir plus de 10 000 connexions simultanées.
Pour les fans de statistiques, il est question d’une utilisation d’environs 2.5mo de mémoire pour chaque 10 000 connexions.
L’éventail des plateformes supportées est assez large. NGINX a été initialement développé pour les plateformes UNIX/Linux. On peut aussi noter que Windows est supporté.
NGINX n’est pas le seul de sa catégorie. Il existe d’autres solutions offrant un même genre se possibilités. Il y a notamment HAProxy qui agit un proxy inverse mais aussi et principalement comme un répartiteur de charge (Load balancer) ou même Varnish qui permet uniquement une cache HTTP.
À première vue, si j’avais l’occasion d’implémenter proxy inverse dans l’un de mes sites web, je le ferais initialement pour le contenu statique. Cela passe par les images mais aussi pour les scripts et les feuilles de style. Ils ne changent pas très souvent et ils peuvent être distribuées aux clients sans que ça ait à passer par le serveur web.
En plus de la cache, ces fichiers n’auraient l’obligation d’être distribuées sur le même serveur que celui qui en charge des pages web. Il pourrait y avoir un serveur dédié à l’hébergement du contenu statique.
La cerise sur le Sundae est l’annonce par l’équipe de développement de NGINX du support pour le protocole SPDY. Ce n’est pas déjà assez pour se laisser tenter par l’expérience?