Introduction aux serveurs web

Introduction

A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.

L’un des cas d’utilisation les plus courants des serveurs web est de servir des fichiers nécessaires au rendu d’un site web dans un navigateur. Lorsque vous visitez http://www.digitalocean.com, vous commencez par saisir une URL qui lance une requête sur Internet. Cette requête passe par plusieurs couches, dont une ou plusieurs seront un serveur web. Ce serveur web génère une réponse à votre demande, qui dans ce cas est le site Web de DigitalOcean, plus précisément la page d’accueil. Idéalement, cela se produit rapidement et avec une disponibilité 24/7.

Alors que tout visiteur de la page d’accueil de DigitalOcean la perçoit comme une seule page web, en réalité, la plupart des pages web modernes aujourd’hui sont une combinaison de nombreuses ressources. Les serveurs web agissent comme un intermédiaire entre le backend et le frontend, servant des ressources telles que des fichiers HTML et CSS aux données JSON, le tout généré dynamiquement à la volée ou servi statiquement. Si vous avez l’intention de travailler avec des sites web ou des applications en ligne de quelque manière que ce soit, il est extrêmement utile de vous familiariser avec les bases de ce qu’est un serveur web et comment il fonctionne.

Alors que le terme « serveur web » peut faire référence soit au logiciel lui-même soit au matériel sur lequel il existe, cet article fait spécifiquement référence au logiciel de serveur web. Pour plus de détails sur cette différence, consultez notre introduction aux serveurs cloud.

Cas d’utilisation courants

A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.

Voici quelques tâches courantes gérées par les serveurs web :

  • Diffusion de fichiers HTML, CSS et JavaScript.
  • Diffusion d’images et de vidéos.
  • Gestion des messages d’erreur HTTP.
  • Gestion des demandes des utilisateurs, souvent de manière concurrente.
  • Direction de la correspondance et de la réécriture des URL.
  • Traitement et diffusion de contenu dynamique.
  • Compression du contenu pour une utilisation optimisée des données et une vitesse accrue.
  • Activation de la mise en cache du navigateur pour votre contenu statique.

En termes pratiques, voici quelques projets personnels qui impliqueraient un serveur web :

  • Vous voulez créer un site web.
  • Vous voulez créer une application qui se connecte à Internet.

Cette liste n’est en aucun cas exhaustive, et un serveur web n’est pas strictement limité dans les types de données qu’il peut servir à un utilisateur final. Par exemple, un serveur web qui traite les demandes d’API web répond souvent avec des données dans un format tel que JSON.

Objectifs d’un serveur web

Les serveurs web répondent à un public exigeant en termes de rapidité, de disponibilité, de fiabilité, et plus encore. Ils ont pour objectif commun de diffuser du contenu sur internet, et pour être considérée comme une solution de serveur web viable, les aspects suivants doivent être pris en compte :

  • Disponibilité : Cela fait référence au temps pendant lequel un serveur web est en ligne et opérationnel. Les sites web doivent être en ligne en permanence pour servir les utilisateurs, donc une disponibilité élevée est l’objectif. Cela se traduit également par la stabilité et la prévisibilité. Lorsqu’un utilisateur entre une URL ou clique sur un lien vers votre site web, la page attendue doit se charger à chaque fois, et à n’importe quel moment. Les seules exceptions devraient être des temps d’arrêt planifiés pour les mises à jour ou la maintenance. Un serveur web qui est bogué ou qui plante à des moments aléatoires nuit à l’expérience de vos utilisateurs.
  • Rapidité : Vos pages web doivent se charger le plus rapidement possible. Les utilisateurs veulent que leur demande soit satisfaite immédiatement, sinon vous risquez de les perdre. Sur une page web qui se charge lentement, même si l’utilisateur attend pendant le premier chargement, chaque chargement long ultérieur diminuera de manière exponentielle sa volonté de rester ou de revenir.
  • Concurrence : Cela fait référence à la gestion de plusieurs demandes arrivant en même temps. Avoir trop de personnes essayant de visiter votre site web en même temps semble être une bonne chose, mais cela devient un véritable problème lorsque les temps de chargement ralentissent à l’extrême et que tout votre serveur plante. Votre serveur physique ou virtuel dispose seulement de ressources limitées telles que la RAM et la puissance de calcul du CPU, et les serveurs web doivent utiliser ces ressources de manière efficace.
  • Évolutivité: L’évolutivité fait référence soit à rendre vos serveurs existants plus puissants grâce à une mise à l’échelle verticale, soit à ajouter plus de serveurs à votre configuration grâce à une mise à l’échelle horizontale. En augmentant votre audience, vous pouvez atteindre un point où vous avez besoin de plus d’un ou deux petits serveurs web.
  • Facilité de configuration: Mettre en place rapidement un projet est essentiel pour son itération. Un processus d’installation simple et reproductible est important pour le premier serveur web que vous configurez, ainsi que pour les serveurs web multiples par la suite lorsque vous mettez à l’échelle.
  • Documentation: Les serveurs web sont complexes. Les configurations les plus courantes vous permettront de démarrer rapidement, mais vos besoins évolueront avec le temps. Souvent, vous aurez besoin de fonctionnalités moins couramment utilisées. À ce moment-là, une bonne documentation est essentielle pour créer des solutions personnalisées adaptées à vos besoins.
  • Support des développeurs: Si les développeurs principaux ne sont pas engagés dans leur propre projet, vous ne devriez pas engager votre projet dans le leur. Cela inclut à la fois les plans de support à long terme pour leur logiciel, ainsi que le support immédiat à court terme qu’ils fournissent sous forme de corrections de bogues et de correctifs.
  • Support de la communauté: Une équipe de développement principale s’occupera de la plupart du travail difficile, mais une communauté prospère contribue à combler les lacunes. Avec les projets open source, cela peut signifier des contributions au code source réel, mais une communauté forte répondra également à vos questions et vous aidera avec vos problèmes spécifiques.

Alors que les serveurs web peuvent offrir différentes solutions, les solutions qu’ils proposent découlent des tentatives visant à résoudre ces mêmes problèmes. Ces problèmes évoluent eux-mêmes avec le temps, ainsi qu’avec les besoins et les attentes de l’utilisateur final, ce qui en fait une liste vivante et en constante évolution.

Sélection d’une solution de serveur web

Les serveurs web open source les plus populaires sont actuellement Apache et Nginx.

Apache est apparu en premier, et a été développé à une époque où il était courant que plusieurs sites web avec leurs propres fichiers de configuration individuels existent tous sur un seul serveur web. Nginx est apparu après Apache, à une époque où les besoins se sont éloignés de la fourniture de plusieurs sites web à partir d’un seul serveur, et se sont plutôt tournés vers la fourniture d’un seul site web à partir d’un seul serveur de manière extrêmement efficace en cas de charge.

Bien que les serveurs web partagent les mêmes objectifs et problèmes, l’interprétation et la mise en œuvre de chaque solution seront différentes. Les réponses exactes à ces problèmes façonnent l’identité de toute solution de serveur web donnée. Nginx et Apache sont mis en avant ici en raison de leur ubiquité, mais toute solution de serveur web sera subjective. Lors de la sélection d’un serveur web, il est important de garder à l’esprit vos propres besoins pour votre projet spécifique. De cette façon, même si le paysage des offres de serveurs web change, votre méthode d’évaluation reste ancrée dans vos propres exigences.

Voici quelques différenciateurs clés dans la manière dont les serveurs web tentent d’accomplir les objectifs d’un serveur web :

Structure des fichiers de configuration

Les serveurs Web stockent leurs paramètres dans des fichiers de configuration. Vous pouvez personnaliser vos serveurs Web en éditant ces fichiers. Le stockage et l’organisation des fichiers de configuration sont des questions structurales opinionnées qui divisent les produits des serveurs Web.

La principale division se situe entre la centralisation et la décentralisation. Les fichiers de configuration décentralisés permettent un niveau de contrôle granulaire au niveau du système de fichiers, ce qui découle de la nécessité d’héberger plusieurs sites Web sur un seul serveur. Les configurations centralisées ne se concentrent pas sur l’hébergement de plusieurs sites Web sur un seul serveur, mais se concentrent plutôt sur la fourniture efficace d’un seul site Web. Ces configurations reposent sur la correspondance de motifs d’URI, qui consiste à faire correspondre les URL aux noms de fichiers et à d’autres identifiants uniques, au lieu de se fier à la correspondance avec la structure de répertoires d’un serveur Web.

Les fichiers .htaccess d’Apache facilitent une configuration décentralisée en tant que fonctionnalité, et chaque décision de conception découle de cette focalisation sur le système de fichiers avec un niveau de contrôle granulaire. Nginx n’a pas la même focalisation sur le système de fichiers et se concentre sur la correspondance de motifs d’URI et une configuration centralisée.

Gestion de la concurrence

Les serveurs physiques et virtuels sur lesquels vous exécutez des serveurs web ont des ressources limitées telles que la RAM et le traitement CPU. La manière dont votre serveur web gère fondamentalement ses requêtes aura le plus grand impact sur l’utilisation efficace de vos ressources. Une seule requête peut engendrer un processus entier par requête, ou elle peut être gérée sur une base événementielle. La capacité de votre serveur web à gérer efficacement de multiples requêtes simultanées est liée à des décisions de conception fondamentales.

Apache gère les requêtes en lançant des processus, ce qui consomme des ressources à un rythme qui peut devenir problématique en cas de charge importante. Le système de gestion des événements de Nginx utilise moins de ressources et peut être plus performant en cas de charge.

Service de contenu statique

Outre les pages web, les serveurs web reçoivent des requêtes pour d’autres ressources telles que des images, des vidéos, des fichiers CSS et des fichiers JavaScript. Comme ces éléments sont toujours les mêmes quel que soit l’utilisateur qui les demande, ce type de contenu est appelé statique. Souvent, une page web elle-même n’est qu’un fichier HTML qui n’est pas personnalisé pour la personne qui le demande, et est également traité comme un contenu statique. Les serveurs web peuvent également compresser ce contenu statique pour des temps de chargement plus rapides.

Nginx excelle dans le service de contenu statique grâce à sa gestion des requêtes événementielle. Apache peut également servir du contenu statique, mais dans la plupart des configurations, pas à la même vitesse et efficacité en cas de charge comparé à Nginx.

Offrir un contenu dynamique

Quand le contenu est modifié, traité et personnalisé en fonction de celui qui le demande, on parle de contenu dynamique. Par exemple, après vous être connecté à un site web, souvent le site remplira dynamiquement votre nom d’utilisateur dans la barre de navigation en haut. Le contenu dynamique ajoute une complexité supplémentaire car il oblige le serveur web à gérer de nombreuses demandes de manière unique au moment où il les reçoit. Le contenu adapté à chaque demande ne peut pas être servi à tout le monde et ne peut pas être mis en cache universellement.

Le traitement du contenu dynamique en interne supprime une couche d’abstraction supplémentaire qui nécessiterait normalement de transmettre la demande à une bibliothèque externe. Apache implémente nativement le traitement du contenu dynamique, avec des piles de solutions populaires telles que LAMP (Linux, Apache, MySQL, PHP). Nginx est plus agnostique quant au langage mais nécessite des bibliothèques externes telles que PHP-FPM pour agir comme une solution similaire pour des cas d’utilisation tels que la pile LAMP.

Capacité de proxy inverse

A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.

L’importance de Nginx dans l’utilisation réelle dépend fortement de ses fonctionnalités de proxy inverse et de son efficacité. De nombreuses configurations de serveurs placent plusieurs serveurs web traditionnels derrière un proxy inverse Nginx, utilisant Nginx pour déterminer vers quel serveur web envoyer la demande en fonction de la charge ou de la configuration des règles. Ce rôle intermédiaire lui permet même de s’associer à Apache dans certaines configurations, en se positionnant comme un proxy inverse devant un serveur web Apache traditionnel.

Écosystème de support

Nginx et Apache bénéficient tous deux d’un solide soutien de la part de leurs équipes de développement respectives et de leur communauté. En tant que serveurs web open source les plus populaires, les ressources d’apprentissage sont abondantes. Apache est soutenu par la fondation Apache, une organisation à but non lucratif, et sera toujours gratuit à utiliser. Le cœur de Nginx est open source, mais des fonctionnalités désirables sont verrouillées derrière leur offre de produit Nginx Plus avec des fonctionnalités telles que les vérifications de santé des serveurs amont, la persistance des sessions et la surveillance avancée.

Alternatives au serveur web traditionnel

Si vous voulez un serveur prêt à tout moment pour répondre à une requête HTTP entrante, alors un serveur web accomplit cette tâche au mieux. Au fur et à mesure que vous vous éloignez de l’accent mis sur le service des requêtes HTTP, les serveurs web deviendront moins une solution idéale. Cela est particulièrement vrai pour les fonctionnalités auxiliaires que les serveurs web fournissent. Par exemple, des fonctionnalités telles que le caching peuvent être gérées de manière plus efficace au niveau du proxy inverse ou du CDN, selon la configuration.

De plus, à mesure que les développeurs ont déplacé leurs priorités en consacrant des ressources de développement à la gestion des serveurs web, des solutions telles que le serverless, le CMS headless et le Jamstack ont émergé en réponse. Ces solutions ne nécessitent pas de serveur web auto-hébergé, mais abstraient plutôt la couche serveur web vers des services externes. Pour les développeurs qui ne nécessitent pas un contrôle granulaire ou avancé de la couche serveur web, le temps de développement peut être concentré ailleurs. Pour en savoir plus, consultez cet article sur Jamstack avec CMS headless ou la mise en œuvre de Jamstack full stack avec la plateforme d’application DigitalOcean.

Conclusion

Dans cet article, vous avez parcouru les bases de ce que sont les serveurs web, comment ils sont utilisés et les problèmes qu’ils cherchent à résoudre. Armé de ces connaissances, vous avez plongé dans le paysage actuel des solutions de serveur web et appliqué vos connaissances pour trouver la solution qui correspond spécifiquement à vos besoins. Pour en savoir plus sur la configuration et l’utilisation d’un serveur web, consultez le reste de notre série de cours sur les serveurs Cloud.

Ressources supplémentaires

Tutoriels:

  • Comment installer Apache: Instructions étape par étape pour configurer votre premier serveur Apache. Cette solution excelle avec une configuration décentralisée pour un contrôle granulaire et la gestion interne des pages web dynamiques avec des accroches dans des langages de programmation populaires tels que PHP.
  • Comment installer Nginx: Instructions étape par étape pour configurer votre premier serveur Nginx. Cette solution excelle avec une configuration centralisée, le service des ressources statiques, en agissant en tant que proxy inverse et en gérant le trafic à haute concurrence.
  • Apache vs Nginx: Considérations pratiques: Un examen plus approfondi des deux principaux acteurs dans le paysage des solutions de serveur web.

Produits DigitalOcean:

  • DigitalOcean Droplets: Serveurs privés virtuels pour tester et déployer des serveurs web.
  • Fonctions DigitalOcean: Solution sans serveur qui peut être une alternative aux serveurs privés virtuels. Évitez la maintenance des serveurs, concentrez-vous sur votre code d’application.

Source:
https://www.digitalocean.com/community/conceptual-articles/introduction-to-web-servers