NGINX

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Nginx)
NGINX
Description de l'image Nginx logo.svg.

Informations
Créateur NGINX, Inc. (en)Voir et modifier les données sur Wikidata
Développé par Maxim Dounin (d) et Igor SysoevVoir et modifier les données sur Wikidata
Première version 4 octobre 2004, il y a 19 ans
Dernière version 1.6.1 ()[1],[2]
1.6.0 ()[3],[4]
1.4.7 ()[5],[6],[7]
1.4.6 ()[8],[9]
1.4.5 ()[10],[11]
1.4.4 ()[12],[13]
1.6.2 ()[14],[15]
1.6.3 ()[16],[17]
1.8.0 ()[18],[19]
1.9.0 ()[20],[21]
1.9.3 ()[22],[23]
1.9.5 ()[24],[25]
1.9.6 ()[26],[27]
1.9.7 ()[28],[29]
1.9.8 ()[30],[31]
1.9.9 ()[32],[33]
1.9.10 ()[34],[35]
1.8.1 ()[36],[37]
1.10.0 ()[38],[39],[40]
1.11.0 ()[41],[42]
1.11.2 ()[43],[44]
1.11.4 ()[45],[46]
1.11.5 ()[47],[48]
1.10.3 ()[49],[50]
1.11.9 ()[51],[52],[53]
1.12.0 ()[54],[47],[55]
1.13.0 ()[56],[52],[57]
1.13.4 ()[58],[52],[59]
1.12.1 ()[60],[52],[61]
1.13.5 ()[52],[62]
1.13.6 ()[52],[63]
1.13.7 ()[52],[64]
1.13.8 ()[52],[65]
1.13.9 ()[66],[67]
1.13.10 ()[68],[69]
1.13.11 ()[70],[71]
1.13.12 ()[70],[72]
1.14.0 ()[73],[74]
1.15.0 ()[58],[75]
1.15.1 ()[76],[77]
1.15.2 ()[78],[79]
1.15.4 ()[58],[80]
1.15.5 ()[58],[81]
1.15.7 ()[58],[82]
1.15.8 ()[58],[83]
1.5.0 ()[84]
1.5.1 ()[85]
1.5.2 ()[86]
1.5.3 ()[87]
1.5.4 ()[88]
1.5.5 ()[89]
1.5.6 ()[90]
1.5.7 ()[91]
1.5.8 ()[92]
1.5.9 ()[93]
1.5.10 ()[94]
1.5.11 ()[95]
1.5.12 ()[96]
1.5.13 ()[97]
1.7.0 ()[98]
1.7.1 ()[99]
1.7.2 ()[100]
1.7.3 ()[101]
1.7.4 ()[102]
1.7.5 ()[103]
1.7.6 ()[104]
1.7.7 ()[105]
1.7.8 ()[106]
1.7.9 ()[107]
1.7.10 ()[108]
1.7.11 ()[109]
1.7.12 ()[110]
1.9.1 ()[111]
1.9.2 ()[112]
1.9.4 ()[113]
1.9.11 ()[114]
1.9.12 ()[115]
1.9.13 ()[116]
1.9.14 ()[117]
1.9.15 ()[118]
1.10.1 ()[119]
1.10.2 ()[120]
1.11.1 ()[121]
1.11.3 ()[122]
1.11.6 ()[123]
1.11.7 ()[124]
1.11.8 ()[125]
1.11.10 ()[126]
1.11.11 ()[127]
1.11.12 ()[128]
1.11.13 ()[129]
1.12.2 ()[130]
1.13.1 ()[131]
1.13.2 ()[132]
1.13.3 ()[133]
1.14.1 ()[134]
1.14.2 ()[135]
1.15.3 ()[136]
1.15.6 ()[137]
1.15.9 ()[138]
1.15.10 ()[139]
1.15.11 ()[140]
1.15.12 ()[141]
1.16.0 ()[142]
1.17.0 ()[143]
1.17.1 ()[144]
1.17.2 ()[145]
1.16.1 ()[146]
1.17.3 ()[147]
1.17.4 ()[148]
1.17.6 ()[149]
1.17.7 ()[150]
1.17.8 ()[151]
1.17.9 ()[152],[153]
1.17.10 ()[70],[154]
1.18.0 ()[155],[156]
1.17.5 ()[157]
1.19.10 ()[158]
1.20.0 ()[159]
1.20.1 ()[160]
1.20.2 ()[161],[162]
1.22.0 ()[163],[164]
1.21.1 ()[165]
1.21.2 ()[166]
1.22.1 ()[167]
1.24.0 ()[168]Voir et modifier les données sur Wikidata
Version avancée 1.25.5 ()[169]Voir et modifier les données sur Wikidata
Dépôt hg.nginx.org/nginx et github.com/nginx/nginxVoir et modifier les données sur Wikidata
Écrit en CVoir et modifier les données sur Wikidata
Système d'exploitation Type Unix et Microsoft WindowsVoir et modifier les données sur Wikidata
Formats lus PEM encoded certificate (d), PEM encoded RSA private key (d) et Nginx sites-available (d)Voir et modifier les données sur Wikidata
Type Serveur web
MandataireVoir et modifier les données sur Wikidata
Politique de distribution logiciel libre
Licence BSD 2-clauses (en)Voir et modifier les données sur Wikidata
Site web nginx.orgVoir et modifier les données sur Wikidata

NGINX Open Source[170] ou NGINX (prononcé [ˌɛndʒɪnˈɛks] et également orthographié Nginx ou nginx) est un logiciel libre de serveur Web (ou HTTP) ainsi qu'un proxy inverse écrit par Igor Sysoev, dont le développement a débuté en 2002 pour les besoins d'un site russe à très fort trafic (Rambler). La documentation est disponible dans plusieurs langues. C'est depuis , le serveur web le plus utilisé au monde d'après Netcraft[171], ou le deuxième serveur le plus utilisé d'après W3techs[172].

NGINX Inc est racheté par F5 Networks le , pour 670 millions de dollars.

Un premier fork du nom d'Angie est créé par une partie des principaux développeurs de nginx, dont Igor Sysoev, en novembre 2022[173],[174].

Le , Maxim Dunin, le dernier des deux principaux développeurs de Nginx à travailler pour F5 Network, annonce, que suite à des différends sur la gestion de la sécurité avec la société, décide de forker nginx en Freenginx au sein de l'organisation Freenginx[174].

Ses sources sont disponibles sous une licence de type BSD.

Particularités[modifier | modifier le code]

Serveur asynchrone[modifier | modifier le code]

NGINX est un système asynchrone par opposition aux serveurs synchrones où chaque requête est traitée par un processus dédié. Au lieu d'exploiter une architecture parallèle et un multiplexage temporel des tâches par le système d'exploitation, NGINX utilise les changements d'état pour gérer plusieurs connexions en même temps ; le traitement de chaque requête est découpé en de nombreuses mini-tâches et permet ainsi de réaliser un multiplexage efficace entre les connexions. Afin de tirer parti des ordinateurs multiprocesseurs, plusieurs processus peuvent être démarrés. Ce choix d'architecture entraine des performances très élevées, ainsi qu'une charge et une consommation de mémoire très inférieures à celles des serveurs HTTP classiques comme Apache.

Modularité[modifier | modifier le code]

NGINX est très modulaire : un noyau minimal et de nombreux modules, venant compléter les fonctions de base. Chaque module peut agir comme un filtre sur le contenu en entrée, en sortie ou intermédiaire (proxy) par le biais de nombreuses fonctions de rappel (callbacks). Ainsi, à titre d'exemple, un contenu dynamique peut être compressé à la volée par le module « gzip » avant envoi.

Ces modules sont liés au serveur lors de la compilation. NGINX ne supporte pas les bibliothèques dynamiques partagées. Tengine, la fourche (fork) de NGINX de Taobao a ajouté cette fonctionnalité, qui n'a pas été reportée sur NGINX[175].

Optimisations[modifier | modifier le code]

Le noyau s'appuie sur des structures de données minimales, mais optimales, visant à réduire le nombre d'appels système, en particulier pour tout ce qui a trait à l'allocation de mémoire. Différents mécanismes de signalisation peuvent être utilisés afin d'exploiter au mieux le système d'exploitation (par exemple : epoll sous Linux et kqueue sous BSD). L'architecture asynchrone soulage l'ordonnanceur du système d'exploitation et favorise l'utilisation des caches ou du/des processeur(s).

Divers[modifier | modifier le code]

Un processus maître contrôle le ou les processus serveurs. Ceci permet des changements de configuration ou la mise à jour du fichier exécutable du serveur sans interruption du service HTTP.

Plates-formes prises en charge[modifier | modifier le code]

NGINX fonctionne sous les systèmes d'exploitation GNU/Linux, BSD, Mac OS X et Solaris ; à partir de la version avancée 0.7.52, NGINX est également disponible pour Microsoft Windows.

Utilisations[modifier | modifier le code]

Outre le fait d'être un serveur HTTP, NGINX peut être configuré pour être un serveur mandataire inverse (en anglais : reverse proxy) Web et un serveur proxy de messagerie électronique (IMAP / POP3). L'utilisation la plus fréquente de NGINX est de le configurer comme un serveur Web classique pour servir des fichiers statiques et comme un proxy pour les requêtes dynamiques typiquement acheminées en utilisant une interface FastCGI vers un ou des serveurs applicatifs avec un mécanisme de répartition de charge.

NGINX est également capable de diffuser, selon le même principe que lighttpd avec mod_flv_streaming, du contenu vidéo en mode continu (streaming) vers un lecteur Flash sans avoir à recourir à Flash Media Server. Pour cela, il comporte un module optionnel http_glv_module de streaming de fichier vidéo flv et plusieurs modules de streaming qui peuvent diffuser une vidéo encodée en H.264. Il permet également de diffuser du mp4 grâce à son module optionnel http_mp4_module.

Il est aussi très utilisé en production pour servir des applications en Ruby on Rails grâce au module Phusion Passenger. La plupart des sites en Ruby on Rails à fort trafic utilisent NGINX (par exemple basecamp ou encore LinuxFr.org[176]).

Popularité[modifier | modifier le code]

NGINX était peu connu, excepté en Russie, avant qu'Aleksandar Lazic ne commence la traduction anglaise en 2006.

  • En , Google le considérait comme le 3e serveur (4 % d'utilisation) parmi les serveurs web les plus fréquentés, après Apache (66 %) et IIS de Microsoft (23 %)[177].
  • En , selon Netcraft, avec plus de 3,3 millions de domaines, NGINX apparaît pour la première fois au rang de quatrième serveur HTTP[178] le plus utilisé au monde (juste devant lighttpd).
  • En , cette tendance est confirmée : Apache 66,65 %, IIS 18,68 % et NGINX 3,06 %[179] (alors que lighttpd n'obtient plus que 0,99 %, et est aussi dépassé par Google Web Server à 1,56 %).
  • En , NGINX est d'après Netcraft le troisième serveur le plus utilisé sur les sites web mondiaux avec 6,04 % de part de marché, derrière les 22,70 % d'IIS et les 59,36 % d'Apache[180].
  • En , ces chiffres restent globalement stables : 64,66 % pour Apache, 16,82 % pour IIS, 6,55 % pour NGINX, 4,61 % pour Google Web Server[181].
  • Runa Capital a investi dans le développement de NGINX en 2011[182].
  • En , NGINX dépasse légèrement IIS, avec 12,18 % contre 12,14 %[183].
  • En , NGINX continue sa progression, avec 12,91 % des sites actifs, alors que Apache passe à 54,37 %, IIS reste stable à 12,13 % et Google Web Server passe à 8,12 %[184].
  • En , concernant les sites actifs, NGINX est utilisé sur 13,81 %, Apache 50,98 %, IIS 10,83 % et Google s'est effondré à 2,42 %. Sur le million de sites les plus visités, l'écart s'est creusé avec IIS. NGINX obtient 21,64 % des sites derrière Apache HTTPD à 48,83 %, tandis qu'IIS n'obtient que 12,13 % des sites sur ce critère[185].
  • En , NGINX est utilisé sur 17 % des sites actifs, contre 49 % à Apache, 10 % à IIS, et un peu moins de 8 % à Google. En ce qui concerne le million de sites les plus visités, il totalise plus de 25 % des sites et est en augmentation constante, derrière Apache à 45 % et devant IIS à 11 %[186].
  • En , selon Netcraft, NGINX est utilisé sur 22 % des sites actifs, contre 30 % pour Apache, 8 % pour Google. En ce qui concerne le million de sites les plus visités, il totalise plus de 26 % des sites, derrière Apache à 33 % et devant IIS à 9 %[187].
  • En , il devient le serveur web le plus utilisé, à la fois en nombre de sites et en nombre d'ordinateurs[171].

Notes et références[modifier | modifier le code]

  1. « http://mailman.nginx.org/pipermail/nginx-announce/2014/000143.html »
  2. « Release 1.6.1 », (consulté le )
  3. « http://mailman.nginx.org/pipermail/nginx-announce/2014/000137.html »
  4. « Release 1.6.0 », (consulté le )
  5. « http://mailman.nginx.org/pipermail/nginx-announce/2014/000134.html »
  6. « http://nginx.org/en/CHANGES-1.4 »,
  7. « Release 1.4.7 », (consulté le )
  8. « http://mailman.nginx.org/pipermail/nginx-announce/2014/000131.html »
  9. « Release 1.4.6 », (consulté le )
  10. « http://mailman.nginx.org/pipermail/nginx-announce/2014/000129.html »
  11. « Release 1.4.5 », (consulté le )
  12. « http://mailman.nginx.org/pipermail/nginx-announce/2013/000124.html »
  13. « Release 1.4.4 », (consulté le )
  14. « http://mailman.nginx.org/pipermail/nginx-announce/2014/000146.html »
  15. « Release 1.6.2 », (consulté le )
  16. « http://mailman.nginx.org/pipermail/nginx-announce/2015/000154.html »
  17. « Release 1.6.3 », (consulté le )
  18. « http://mailman.nginx.org/pipermail/nginx-announce/2015/000156.html »
  19. « Release 1.8.0 », (consulté le )
  20. « http://mailman.nginx.org/pipermail/nginx-announce/2015/000157.html »
  21. « Release 1.9.0 », (consulté le )
  22. « http://mailman.nginx.org/pipermail/nginx-announce/2015/000160.html »
  23. « Release 1.9.3 », (consulté le )
  24. « http://mailman.nginx.org/pipermail/nginx-announce/2015/000162.html »
  25. « Release 1.9.5 », (consulté le )
  26. « http://mailman.nginx.org/pipermail/nginx-announce/2015/000163.html »
  27. « Release 1.9.6 », (consulté le )
  28. « [nginx-announce] nginx-1.9.7 »
  29. « Release 1.9.7 », (consulté le )
  30. « http://mailman.nginx.org/pipermail/nginx-announce/2015/000165.html »
  31. « Release 1.9.8 », (consulté le )
  32. « http://mailman.nginx.org/pipermail/nginx-announce/2015/000166.html »
  33. « Release 1.9.9 », (consulté le )
  34. « http://mailman.nginx.org/pipermail/nginx-announce/2016/000167.html »
  35. « Release 1.9.10 », (consulté le )
  36. « http://mailman.nginx.org/pipermail/nginx-announce/2016/000168.html »
  37. « Release 1.8.1 », (consulté le )
  38. « http://nginx.org/en/CHANGES-1.10 », (consulté le )
  39. « http://mailman.nginx.org/pipermail/nginx-announce/2016/000175.html »
  40. « Release 1.10.0 », (consulté le )
  41. « http://mailman.nginx.org/pipermail/nginx-announce/2016/000176.html »,
  42. « Release 1.11.0 », (consulté le )
  43. « http://mailman.nginx.org/pipermail/nginx-announce/2016/000180.html »
  44. « Release 1.11.2 », (consulté le )
  45. « http://mailman.nginx.org/pipermail/nginx-announce/2016/000182.html »
  46. « Release 1.11.4 », (consulté le )
  47. a et b « http://nginx.org/2016.html »
  48. « Release 1.11.5 », (consulté le )
  49. « http://nginx.org/en/CHANGES-1.10 »,
  50. « Release 1.10.3 », (consulté le )
  51. « http://nginx.org/en/CHANGES »,
  52. a b c d e f g et h « http://nginx.org/2017.html »
  53. « Release 1.11.9 », (consulté le )
  54. « https://nginx.org/en/CHANGES-1.12 »,
  55. « Release 1.12.0 », (consulté le )
  56. « https://nginx.org/en/CHANGES »,
  57. « Release 1.13.0 », (consulté le )
  58. a b c d e et f « http://nginx.org/en/CHANGES »
  59. « Release 1.13.4 », (consulté le )
  60. « http://nginx.org/en/CHANGES-1.12 »
  61. « Release 1.12.1 », (consulté le )
  62. « Release 1.13.5 », (consulté le )
  63. « Release 1.13.6 », (consulté le )
  64. « Release 1.13.7 », (consulté le )
  65. « Release 1.13.8 », (consulté le )
  66. « http://nginx.org/en/CHANGES » (consulté le )
  67. « Release 1.13.9 », (consulté le )
  68. « https://nginx.org/en/CHANGES » (consulté le )
  69. « Release 1.13.10 », (consulté le )
  70. a b et c « https://nginx.org/en/CHANGES »
  71. « Release 1.13.11 », (consulté le )
  72. « Release 1.13.12 », (consulté le )
  73. « http://nginx.org/en/CHANGES-1.14 »
  74. « Release 1.14.0 », (consulté le )
  75. « Release 1.15.0 », (consulté le )
  76. « http://nginx.org/en/CHANGES » (consulté le )
  77. « Release 1.15.1 », (consulté le )
  78. (en) « Changes » (consulté le )
  79. « Release 1.15.2 », (consulté le )
  80. « Release 1.15.4 », (consulté le )
  81. « Release 1.15.5 », (consulté le )
  82. « Release 1.15.7 », (consulté le )
  83. « Release 1.15.8 », (consulté le )
  84. « Release 1.5.0 », (consulté le )
  85. « Release 1.5.1 », (consulté le )
  86. « Release 1.5.2 », (consulté le )
  87. « Release 1.5.3 », (consulté le )
  88. « Release 1.5.4 », (consulté le )
  89. « Release 1.5.5 », (consulté le )
  90. « Release 1.5.6 », (consulté le )
  91. « Release 1.5.7 », (consulté le )
  92. « Release 1.5.8 », (consulté le )
  93. « Release 1.5.9 », (consulté le )
  94. « Release 1.5.10 », (consulté le )
  95. « Release 1.5.11 », (consulté le )
  96. « Release 1.5.12 », (consulté le )
  97. « Release 1.5.13 », (consulté le )
  98. « Release 1.7.0 », (consulté le )
  99. « Release 1.7.1 », (consulté le )
  100. « Release 1.7.2 », (consulté le )
  101. « Release 1.7.3 », (consulté le )
  102. « Release 1.7.4 », (consulté le )
  103. « Release 1.7.5 », (consulté le )
  104. « Release 1.7.6 », (consulté le )
  105. « Release 1.7.7 », (consulté le )
  106. « Release 1.7.8 », (consulté le )
  107. « Release 1.7.9 », (consulté le )
  108. « Release 1.7.10 », (consulté le )
  109. « Release 1.7.11 », (consulté le )
  110. « Release 1.7.12 », (consulté le )
  111. « Release 1.9.1 », (consulté le )
  112. « Release 1.9.2 », (consulté le )
  113. « Release 1.9.4 », (consulté le )
  114. « Release 1.9.11 », (consulté le )
  115. « Release 1.9.12 », (consulté le )
  116. « Release 1.9.13 », (consulté le )
  117. « Release 1.9.14 », (consulté le )
  118. « Release 1.9.15 », (consulté le )
  119. « Release 1.10.1 », (consulté le )
  120. « Release 1.10.2 », (consulté le )
  121. « Release 1.11.1 », (consulté le )
  122. « Release 1.11.3 », (consulté le )
  123. « Release 1.11.6 », (consulté le )
  124. « Release 1.11.7 », (consulté le )
  125. « Release 1.11.8 », (consulté le )
  126. « Release 1.11.10 », (consulté le )
  127. « Release 1.11.11 », (consulté le )
  128. « Release 1.11.12 », (consulté le )
  129. « Release 1.11.13 », (consulté le )
  130. « Release 1.12.2 », (consulté le )
  131. « Release 1.13.1 », (consulté le )
  132. « Release 1.13.2 », (consulté le )
  133. « Release 1.13.3 », (consulté le )
  134. « Release 1.14.1 », (consulté le )
  135. « Release 1.14.2 », (consulté le )
  136. « Release 1.15.3 », (consulté le )
  137. « Release 1.15.6 », (consulté le )
  138. « Release 1.15.9 », (consulté le )
  139. « Release 1.15.10 », (consulté le )
  140. « Release 1.15.11 », (consulté le )
  141. « Release 1.15.12 », (consulté le )
  142. « Release 1.16.0 », (consulté le )
  143. « Release 1.17.0 », (consulté le )
  144. « Release 1.17.1 », (consulté le )
  145. « Release 1.17.2 », (consulté le )
  146. « Release 1.16.1 », (consulté le )
  147. « Release 1.17.3 », (consulté le )
  148. « https://github.com/nginx/nginx/releases/tag/release-1.17.4 »,
  149. « Release 1.17.6 », (consulté le )
  150. « https://github.com/nginx/nginx/releases/tag/release-1.17.7 »,
  151. « https://github.com/nginx/nginx/releases/tag/release-1.17.8 »,
  152. « https://nginx.org/en/CHANGES » (consulté le )
  153. « Release 1.17.9 », (consulté le )
  154. « Release 1.17.10 », (consulté le )
  155. « https://nginx.org/en/CHANGES-1.18 » (consulté le )
  156. « Release 1.18.0 », (consulté le )
  157. « Release 1.17.5 », (consulté le )
  158. « Release 1.19.10 », (consulté le )
  159. « Release 1.20.0 », (consulté le )
  160. « Release 1.20.1 », (consulté le )
  161. « http://nginx.org/en/download.html »
  162. « Release 1.20.2 », (consulté le )
  163. « nginx news »
  164. « https://github.com/nginx/nginx/releases/tag/release-1.22.0 », (consulté le )
  165. « Release 1.21.1 », (consulté le )
  166. « Release 1.21.2 », (consulté le )
  167. Maxim Dounin, « nginx-1.22.1 », (consulté le )
  168. « Changes with nginx 1.24.0 »
  169. « Changes with nginx 1.25.5 » (consulté le )
  170. (en-US) « NGINX | High Performance Load Balancer, Web Server, & Reverse Proxy », sur NGINX (consulté le )
  171. a et b (en) « April 2019 Web Server Survey », sur Netcraft,
  172. « Usage Statistics and Market Share of Web Servers, March 2020 », sur w3techs.com (consulté le )
  173. (en) darkcrizt, « Angie is a fork created by former F5 developers », sur desdelinux.net,
  174. a et b (en) Kevin Purdy, « Nginx core developer quits project in security dispute, starts “freenginx” fork », sur Ars Technica,
  175. (en) « Dynamic Module Loading Support (DSO) », tengine.taobao.org (consulté le )
  176. Architecture de LinuxFr.org, en vigueur depuis février 2011
  177. (en) « Web Server Software and Malware », sur Googleonlinesecurity.blogspot.com,
  178. (en) « December 2008 Web Server Survey », sur Netcraft
  179. (en) « March 2009 Web Server Survey », sur Netcraft,
  180. (en) « November 2010 Web Server Survey », sur Netcraft,
  181. (en) « July 2011 Web Server Survey », sur Netcraft,
  182. (en) « Top ranking Russian web server Nginx raises $3 million from Russian and international funds », sur East-West Digital News, (consulté le )
  183. (en) « January 2012 Web Server Survey », sur Netcraft,
  184. (en) « April 2013 Web Server Survey », sur Netcraft,
  185. (en) « May 2015 Web Server Survey », sur Netcraft,
  186. (en) « April 2016 Web Server Survey », sur Netcraft,
  187. (en) « December 2018 Web Server Survey », sur Netcraft,

Voir aussi[modifier | modifier le code]

Liens externes[modifier | modifier le code]