Recherche de site Web

Pourquoi je trouve Nginx pratiquement meilleur qu'Apache


Selon la dernière enquête sur les serveurs Web réalisée par Netcraft fin 2017 (plus précisément en novembre), Apache et Nginx sont les serveurs Web open source les plus utilisés sur Internet.

Apache est un serveur HTTP gratuit et open source pour les systèmes d'exploitation de type Unix et Windows. Il a été conçu pour être un serveur sécurisé, efficace et extensible qui fournit des services HTTP synchronisés avec les normes HTTP en vigueur.

Depuis son lancement, Apache est le serveur Web le plus populaire sur Internet depuis 1996. Il s'agit du standard de facto pour les serveurs Web de l'écosystème Linux et open source. Les nouveaux utilisateurs de Linux le trouvent généralement plus facile à configurer et à utiliser.

Nginx (prononcé « Engine-x ») est un serveur HTTP gratuit, open source et hautes performances, un proxy inverse et un serveur proxy IMAP/POP3. Tout comme Apache, il fonctionne également sur les systèmes d'exploitation de type Unix et Windows.

Bien connu pour ses hautes performances, sa stabilité, sa configuration simple et sa faible consommation de ressources, il est devenu au fil des années si populaire et son utilisation sur Internet se dirige vers de plus hauts sommets. C'est désormais le serveur Web de choix parmi les administrateurs système expérimentés ou les webmasters des meilleurs sites.

Certains des sites très fréquentés alimentés par :

  • Apache sont : PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com et bien d'autres encore.
  • Nginx sont : Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud et bien d'autres.

Il existe de nombreuses ressources déjà publiées sur le web concernant la comparaison entre Apache et Nginx (je veux vraiment dire les articles 'Apache Vs Nginx'), de nombreuses dont expliquent clairement en détail leurs principales caractéristiques et opérations dans divers scénarios, y compris les mesures de performance dans les tests de laboratoire. Ce sujet ne sera donc pas abordé ici.

Je partagerai simplement mon expérience et mes réflexions sur l'ensemble du débat, après avoir essayé Apache et Nginx, tous deux dans des environnements de production basés sur les exigences d'hébergement d'applications Web modernes, dans le prochain section.

Raisons pour lesquelles je trouve Nginx pratiquement meilleur qu'Apache

Voici les raisons pour lesquelles je préfère le serveur Web Nginx à Apache pour la diffusion de contenu Web moderne :

1. Nginx est léger

Nginx est l'un des serveurs Web légers du marché. Il a une faible empreinte sur un système par rapport à Apache qui implémente une vaste gamme de fonctionnalités nécessaires à l'exécution d'une application.

Étant donné que Nginx rassemble une poignée de fonctionnalités de base, il s'appuie sur des serveurs Web tiers dédiés en amont, tels qu'un serveur backend Apache, FastCGI, Memcached, SCGI et uWSGI ou un serveur d'applications, c'est-à-dire des serveurs spécifiques à un langage tels que Node.js, Tomcat. , etc.

Par conséquent, son utilisation de la mémoire est bien mieux adaptée aux déploiements de ressources limitées que Apache.

2. Nginx est conçu pour une concurrence élevée

Contrairement à l'architecture orientée threads ou processus d'Apache (modèle processus par connexion ou thread par connexion), Nginx utilise une architecture évolutive et pilotée par les événements (asynchrone). Il utilise un modèle de processus responsable adapté aux ressources matérielles disponibles.

Il dispose d'un processus maître (qui effectue les opérations privilégiées telles que la lecture de la configuration et la liaison aux ports) et qui crée plusieurs processus de travail et d'assistance.

Les processus de travail peuvent chacun gérer simultanément des milliers de connexions HTTP, lire et écrire du contenu sur le disque et communiquer avec les serveurs en amont. Les processus d'assistance (gestionnaire de cache et chargeur de cache) peuvent gérer les opérations de mise en cache du contenu sur disque.

Cela rend ses opérations évolutives et se traduit par des performances élevées. Cette approche de conception le rend en outre rapide et favorable aux applications modernes. De plus, des modules tiers peuvent être utilisés pour étendre les fonctionnalités natives de Nginx.

3. Nginx est facile à configurer

Nginx a une structure de fichier de configuration simple, ce qui le rend très facile à configurer. Il se compose de modules contrôlés par des directives spécifiées dans le fichier de configuration. De plus, les directives sont divisées en directives de bloc et directives simples.

Une directive de bloc est définie par des accolades ({ et }). Si une directive de bloc peut avoir d'autres directives entre accolades, elle est appelée un contexte tel que les événements, http, le serveur et l'emplacement.

http {
	server {
		
	}
}

Une directive simple se compose du nom et des paramètres séparés par des espaces et se termine par un point-virgule (;).

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

Vous pouvez inclure des fichiers de configuration personnalisés à l'aide de la directive include, par exemple.

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

Un exemple pratique pour moi était la façon dont j'ai réussi à configurer facilement Nginx pour exécuter plusieurs sites Web avec différentes versions de PHP, ce qui était un peu un défi avec Apache.

4. Nginx est un excellent proxy frontend

L'une des utilisations courantes de Nginx est de le configurer en tant que serveur proxy. Dans ce cas, il reçoit les requêtes HTTP des clients et les transmet aux serveurs proxy ou en amont mentionnés ci-dessus, via différents protocoles. Vous pouvez également modifier les en-têtes de requête client envoyés au serveur proxy et configurer la mise en mémoire tampon des réponses provenant des serveurs proxy.

Ensuite, il reçoit les réponses des serveurs mandatés et les transmet aux clients. Il est beaucoup plus facile à configurer en tant que serveur proxy qu'Apache puisque les modules requis sont dans la plupart des cas activés par défaut.

5. Nginx est remarquable pour servir du contenu statique

Le contenu ou les fichiers statiques sont généralement des fichiers stockés sur le disque de l'ordinateur serveur, par exemple des fichiers CSS, des fichiers JavaScript ou des images. Considérons un scénario dans lequel vous utilisez Nginx comme interface pour Nodejs (le serveur d'applications).

Bien que le serveur Nodejs (en particulier les frameworks Node) disposent de fonctionnalités intégrées pour la gestion des fichiers statiques, ils n'ont pas besoin d'effectuer un traitement intensif pour fournir du contenu non dynamique. Il est donc pratiquement avantageux de configurer le serveur Web pour qu'il serve directement le contenu statique à clients.

Nginx peut effectuer un bien meilleur travail de gestion des fichiers statiques à partir d'un répertoire spécifique et peut empêcher les demandes d'actifs statiques d'étouffer les processus du serveur en amont. Cela améliore considérablement les performances globales des serveurs backend.

6. Nginx est un équilibreur de charge efficace

Pour obtenir des performances et une disponibilité élevées pour les applications Web modernes, il peut être nécessaire d'exécuter plusieurs instances d'application sur un serveur HTTP unique ou distribué. Cela peut à son tour nécessiter la configuration d'un équilibrage de charge pour répartir la charge entre vos serveurs HTTP.

Aujourd'hui, l'équilibrage de charge est devenu une approche largement utilisée pour optimiser l'utilisation des ressources du système d'exploitation, maximiser la flexibilité, réduire la latence, augmenter le débit, atteindre la redondance et établir des configurations tolérantes aux pannes, sur plusieurs instances d'application.

Nginx utilise les méthodes d'équilibrage de charge suivantes :

  • round-robin (méthode par défaut) – les requêtes adressées aux serveurs en amont sont distribuées de manière circulaire (dans l'ordre de la liste des serveurs du pool en amont).
  • le moins connecté – ici, la requête suivante est transmise par proxy au serveur avec le moins de connexions actives.
  • ip-hash – ici, une fonction de hachage est utilisée pour déterminer quel serveur doit être sélectionné pour la prochaine requête (en fonction de l'adresse IP du client).
  • Hash générique : dans le cadre de cette méthode, l'administrateur système spécifie un hachage (ou une clé) avec le texte donné, les variables de la requête ou du runtime, ou leur combinaison. Par exemple, la clé peut être une adresse IP et un port source, ou URI. Nginx répartit ensuite la charge entre les serveurs en amont en générant un hachage pour la requête en cours et en le plaçant sur les serveurs en amont.
  • Moins de temps (Nginx Plus) – attribue la requête suivante au serveur en amont avec le moins de connexions actuelles mais favorise les serveurs avec les temps de réponse moyens les plus bas.

7. Nginx est hautement évolutif

De plus, Nginx est une application Web hautement évolutive et moderne, en particulier les applications d'entreprise qui exigent une technologie offrant des performances et une évolutivité élevées.

CloudFlare est une entreprise bénéficiant des étonnantes fonctionnalités d'évolutivité de Nginx. Elle a réussi à faire évoluer ses applications Web pour gérer plus de 15 milliards de pages vues par mois avec une infrastructure relativement modeste, selon Matthew Prince., co-fondateur et PDG de CloudFare.

Pour une explication plus complète, consultez cet article sur le blog Nginx : NGINX vs. Apache : Notre point de vue sur une question vieille d'une décennie.

Conclusion

Apache et Nginx ne peuvent pas être remplacés l'un par l'autre, ils ont leurs points forts et leurs points faibles. Cependant, Nginx offre une technologie puissante, flexible, évolutive et sécurisée pour alimenter de manière fiable et efficace les sites Web et les applications Web modernes. Quelle est votre opinion ? Faites-le-nous savoir via le formulaire de commentaires ci-dessous.