Le monde de l’informatique ne cesse d’évoluer, surtout après l’accélération de la transition numérique provoquée par l’avènement du Big Data. De nouvelles technologies et de nouvelles techniques sont apparues afin de faciliter le déploiement des applications et des sites sur le web.

Si vous êtes impliqué dans le domaine de la programmation informatique, plus précisément dans la programmation web, alors vous aurez peut-être entendu parler du serveur Nginx.  Il s’agit d’un serveur web HTTP libre sous licence BSD. Dans cet article, nous allons découvrir le fonctionnement et le problème que le serveur Nginx a résolu. Comment l’installer et le configurer sous Windows et Linux ? Sans plus tarder, rentrons dans le vif du sujet.

Qu’est-ce que NGINX ?

Développé par le programmeur Sysoev, Nginx un logiciel de serveur distribué en 2004. L’objectif de Sysoev était de créer un serveur de haute performance qui peut gérer en même temps plusieurs clients web. En constatant que beaucoup de personnes veulent utiliser Nginx, sa version libre a été développée en parallèle ainsi que sa version payante appelée Nginx plus. 

Tout comme Apache, Nginx possède aussi une interface modulaire. Cela veut dire qu’un module propose différentes fonctions et c’est à l’administrateur de les activer ou non. Voici quelques exemples de choix qui existent parmi les différentes fonctionnalités : 

  • Reverse Proxying ou proxy inverse : ici, Nginx est utilisé comme un proxy inverse dans le but d’accélérer les chargements web ou l’utilisation d’un proxy email ;
  • Application Acceleration : cette fonction permet de charger rapidement les contenus ;
  • Chiffrement TLS : cette fonctionnalité sécurise les échanges de données ;
  • Load balancing ou équilibreur de charge : celle-ci diminue les charges sur le serveur principal en répartissant les demandes ;
  • Gestion de la bande passante : cette fonction associe la bande passante optimale pour chaque service proposé ;
  • Videostreaming ou vidéo en streaming : elle donne une meilleure performance pour le streaming de fichiers M et FLV.

Pourquoi Nginx a été créé ?

Aujourd’hui connu de tous pour sa performance et sa stabilité, Nginx a d’abord été créé pour résoudre le problème C10k. Il s’agit du problème de 10.000 connexions simultanées. Ce problème est lié à un manque d’optimisation des connexions réseau pour plusieurs clients simultanément. Pour remédier à ce souci, Nginx utilise une architecture asynchrone et événementielle pour la gestion de toutes ces données.

Comment fonctionne Nginx ?

Le but du serveur Nginx est de permettre une faible utilisation de la mémoire et une grande simultanéité. Mais comment cela se passe-t-il ?

À chaque requête web, au lieu de créer un nouveau processus, Nginx utilise plutôt une approche asynchrone et événementielle où le traitement des requêtes s’effectue dans un seul thread.

Avec Nginx, un processus père peut prendre le contrôle de plusieurs processus fils. Le processus père gère les processus fils et les processus fils accomplissent réellement les tâches à traiter. Et comme Nginx est asynchrone, toutes les requêtes sont lancées en même temps et aucun processus ne bloque l’autre.

Voici quelques caractéristiques communes vues dans Nginx :

  • Proxy inversé avec mise en cache ;
  • IPv6 ;
  • Équilibrage de charge ;
  • Support FastCGI avec mise en cache, uWSGI, SCGI et serveur de cache memcached ;
  • WebSockets ;
  • Filtre divers pour gzip, xslt, ssi, transformation d’image ;
  • Gestion des fichiers statiques, des fichiers d’index et de l’indexation automatique.

Il existe également quelques autres fonctionnalités comme : 

  • La gestion du keepalive des connexions clientes ;
  • Le contrôle d’accès : par IP, mot de passe ;
  • Hébergement par nom ou par adresse IP ;
  • La gestion des logs : syslog, rotation, buffer ;
  • Streaming FLV et MP.

Installation et configuration du serveur Nginx

La version payante Nginx plus dispose d’un guide d’installation. Il est facile de l’installer sur les systèmes Linux, car les distributions Linux disposent déjà d’un Nginx intégré. Vous allez trouver une explication d’installation pour chaque système ci-dessous :

Installation sous Windows

Tout d’abord, il faut télécharger la version principale de Nginx comme Nginx le recommande. Cependant, vous n’aurez aucun problème si vous téléchargez sa version stable la plus récente. Pour ce faire, rendez-vous sur le site de Nginx.

Une fois que le téléchargement est terminé, il faut extraire le fichier.

dossier-nginx

Après cela, il faut mettre le nouveau dossier dans le répertoire Program Files.

copie-dossier-nginx

Pour lancer Nginx, il suffit de double-cliquer sur le fichier nginx.exe.

execution-nginx

Maintenant, vous devez vérifier si vous avez réussi l’installation. Pour cela, rendez-vous sur votre navigateur par défaut et tapez localhost. Si tout s’est bien passé vous aurez le message ci-dessous :

nginx-localhost

Pour stopper le serveur Nginx, il faut passer par le Gestionnaire des tâches.

Configuration Nginx sur votre PC Windows

Pour lancer Nginx, il faut passer par le serveur web Microsoft le IIS (Internet information Service). Rendez-vous sur le panneau de configuration et cliquez sur “Activer ou désactiver des fonctionnalités Windows”. Une fois cela fait, vérifiez les champs “Outils d’administration web” et “ Console de gestion IIS”.

activation-iis

Pour que l’IIS soit active sur votre ordinateur, il faut attendre un certain temps afin que les modifications appliquées soient prises en compte.

mis-a-jour-modification

Il est également possible d’ouvrir IIS Manager depuis le menu démarrer. En faisant cela, vous accédez directement au site web par défaut qui a pour adresse “inetpub/www.root« .  

acces-iis-defaut

Notez qu’il est important de changer le chemin physique de cette racine vers un dossier que vous souhaitez. Ici, nous allons créer un dossier en le nommant travail dans la partition C:

gestionnaire-iis

Maintenant, on part dans le dossier Nginx que nous avons téléchargé et sélectionnons le fichier nginx.conf qui se trouve dans le dossier conf

ngix-conf

Ouvrez le fichier à l’aide d’un éditeur de texte.

fichier-nginx-conf

Modifiez la racine par le chemin physique obtenu précédemment à savoir C:\travail

modification-nginx-conf

Puis, allez dans le dossier racine et modifiez le fichier index.html. Mettez le message que vous souhaitez faire afficher à l’écran quand le serveur web se lance.

index

Par exemple, on va modifier la ligne h1 et mettre le message “Nginx réussi et prêt à travailler”.

modification-index

Passons à la vérification et relançons le programme nginx.exe. Tapez localhost dans un votre navigateur et vous verrez la modification que nous venons d’effectuer.

execution-index

Installation sous Linux

Pour Linux, commencez par actualiser les différents éléments du paquet Nginx afin d’avoir les dernières versions, puis lancez l’installation. Voici les commandes à utiliser pour cela :

sudo apt-get update
sudo apt-get install nginx
install-nginx-linux

Voici les principales commandes pour le démarrage de NGinx :

  • Démarrer Nginx :
sudo systemctl start nginx
  • Activer Nginx :
sudo systemctl enable nginx
  • Vérifier que Nginx est en cours d’exécution :
sudo systemctl status nginx
cmd-nginx

Pour vérifier si tout est bien installé, il faut taper localhost dans un navigateur web et si vous obtenez ceci, alors tout est en place.

localhost-nginx

Configuration Nginx sur votre PC Linux

Pour la configuration, tout ce dont vous aurez besoin se trouve dans le dossier /etc/nginx puis dans le fichier nginx.conf. À chaque modification de ce fichier, il est nécessaire de redémarrer le serveur pour que ces dernières soient prises en compte. Pour redémarrer le serveur, tapez les commandes suivantes : 

sudo service nginx reload
sudo service nginx restart

Le fichier nginx.conf présente les caractéristiques suivantes : 

  • Paramètres avancés : les paramètres comme events-variable ont des arguments qui leur sont propres. Ses sous-éléments sont dans des accolades.
events {
  worker_connections 768;
  multi_accept on;
}
  • Réglage : au début de chaque réglage, on trouve le nom de la variable correspondant. Les arguments sont délimités par un espace vide et une ligne prend fin par un point-virgule.
worker_connections 768;
  • Signe dièse (#) : ce caractère désactive la ligne pour la mettre sous forme de commentaire.
# multi_accept on;

Proxy inverse : Qu’est-ce que c’est ?

Pour avoir une idée claire sur le proxy inverse, il faut d’abord comprendre les termes qui s’y rapportent. 

Quand vous allez sur internet en saisissant un nom de domaine ou en passant par un lien, votre navigateur se met directement en connexion avec le serveur du site web et met à votre disposition les ressources disponibles. 

Maintenant, si vous souhaitez ne pas faire connaître votre adresse IP par les sites web que vous fréquentez, vous allez utiliser le serveur proxy inverse. 

Le proxy inverse donc est un service qui fait passer la demande client à un ou plusieurs serveurs proxys, puis récupère la réponse pour la fournir au client.

Configuration de NGInx en tant que proxy inverse

Tout d’abord, vous devez envoyer les trafics vers un serveur IIS simple en utilisant le nom DNS rproxy-rdr-it-io. Créez un fichier configuration pour le virtualhost.

sudo touch /etc/nginx/sites-available/rproxy-rdr-it-io

Ensuite, ouvrez le fichier que vous venez de créer et collez la configuration suivante : 

server{
    # Port d'écoute
    listen 80;
    # Enregistrement DNS pour la demande de capture
    server_name rproxy.rdr-it.io;
    # Ouvrir le bloc pour traiter la demande de transfert
    location /{
        # Serveur où le trafic est transféré
        proxy_pass http://srv-web-iis;
        # Inclure le fichier proxy_params avec les paramètres généraux
        include proxy_params;
    }
}

Les commentaires vous permettront de comprendre ces différentes lignes. Pour que les modifications soient activées, il faut ajouter un lien symbolique, comme ceci :

sudo ln -s /etc/nginx/sites-available/rproxy-rdr-it-io /etc/nginx/sites-enabled

Utilisation de l’image Docker Open Source NGInx

Comme nous l’avons vu dans notre guide ultime Docker, on peut conteneuriser une image de Nginx. Grâce à cette image Open Source disponible sur docker Hub, vous avez la possibilité de créer une instance Nginx. Voici un exemple simple avec une configuration par défaut de Nginx pour lancer une instance Nginx :

docker run --name mynginx1 -p 80:80 -d nginx
fcd1fb01b14557c7c9d991238f2558ae2704d129cf9fb97bb4fadf673a58580d

La commande ci-dessous va créer un conteneur nommé mynginx1 qui est axé sur l’image Nginx. Cette commande renvoie la forme longue de l’ID de conteneur.

Grâce à l’option -p, docker mappe le port exposé dans le conteneur par image Nginx -port 80 au port dédié sur l’hôte Docker. Le premier paramètre précise le port dans l’hôte Docker et le deuxième est mappé au port qui se trouve dans le conteneur.

L’option -d indique que le conteneur s’exécute en mode détaché. Cela veut dire que tant qu’il n’est pas arrêté, il continue de s’exécuter. Mais elle ne répond pas à la commande exécutée sur la ligne de commande.

Pour voir si le conteneur a été bien créé et est en cours d’exécution, il faut taper la commande suivante : 

docker ps

Le load balancing ou équilibrage de charge avec Nginx 

Le meilleur moyen de faire grandir votre application et d’augmenter ses performances et sa redondance en utilisant le load balancing. Nginx est un logiciel de serveur web très connu qui peut être configuré comme un équilibreur de charge simple. Cela peut améliorer l’efficacité et la disponibilité des ressources de vos serveurs.

Configuration de Nginx en tant que load balancing

Pour configurer Nginx en équilibreur de charge, il vous faut des instructions pour connaitre le type de connexion à écouter et l’emplacement où les rediriger. Pour commencer, créez un fichier de configuration et éditez-le avec un éditeur de votre choix.

sudo nano /etc/nginx/conf.d/load-balancer.conf

Dans le fichier load-balancer.conf copier et coller les lignes de code suivant : 

# Définissez les serveurs à inclure dans le schéma d'équilibrage de charge. 
# Il est préférable d'utiliser les adresses IP privées des serveurs pour de meilleures performances et une meilleure sécurité. 
# Vous pouvez trouver les adresses IP privées dans la section Réseau de votre panneau de contrôle UpCloud . 

http {
   upstream backend {
      server 10.1.0.101; 
      server 10.1.0.102;
      server 10.1.0.103;
   }

   # This server accepts all traffic to port 80 and passes it to the upstream. 
   # Notice that the upstream name and the proxy_pass need to match.

   server {
      listen 80; 

      location / {
          proxy_pass http://backend;
      }
   }}

Enregistrez le fichier et quittez l’éditeur de texte. Ensuite, désactivez la configuration de serveur par défaut que vous avez testé précédemment et qui est toujours en fonction après l’installation. Il faut savoir que cette partie diffère sur chaque système d’exploitation.

Sur les systèmes Linux, il faut juste supprimer les liens symboliques par défaut du dossier sites-enabled.

sudo rm /etc/nginx/sites-enabled/default

Les hôtes CentOS n’utilisent pas la même liaison. Au lieu de cela, renommez simplement default.conf dans le répertoire conf.d/ en quelque chose qui ne se termine pas par .conf, par exemple :

sudomv/etc/nginx/conf.d/default.conf/etc/nginx/conf.d/default.conf.disled

Puis, il faut redémarrer Nginx.

sudo systemctl redémarrer nginx

Maintenant, vérifiez que Nginx démarre correctement. Si ce n’est pas le cas, vérifiez le fichier /etc/nginx/conf.d/load-balancer.conf que vous venez de créer et assurez-vous qu’il n’y a pas d’erreurs de frappe ou de points-virgules manquants. 

Lorsque vous entrez l’adresse IP publique de l’équilibreur de charge dans votre navigateur web, vous devez passer à l’un de vos serveurs principaux.

Équilibrage de charge avec HTTPS

Pour rendre votre site web crédible et assurer la sécurité de vos visiteurs, il faut activer HTTPS dans votre site. C’est très simple d’utiliser le chiffrement avec un équilibreur de charge. Pour cela, il faut ajouter une nouvelle section de serveur à votre fichier de configuration d’équilibrage de charge. Et enfin, il faut configurer un proxy_pass pour votre segment.

Comme nous l’avons fait précédemment, ouvrez le fichier de configuration.

sudo nano /etc/nginx/conf.d/load-balancer.conf

Copier et coller le segment de serveur suivant à la fin du fichier :

server {
   listen 443 ssl;
   server_name domain_name;
   ssl_certificate /etc/letsencrypt/live/domain_name/cert.pem;
   ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

   location / {
      proxy_pass http://backend;
   }
}

Quittez l’éditeur en enregistrant le fichier.

sudo systemctl redémarrer nginx

Configurez le chiffrement sur votre équilibreur de charge offre de grands avantages, surtout lorsque vous utilisez les connexions réseau privées à votre backend. En effet,

  • comme il n’y a que vos serveurs UpCloud qui ont accès à votre réseau privé, il sera facile pour vous de finaliser le SSL au niveau de l’équilibreur de charge afin de ne pouvoir envoyer que des connexions HTTP.
  • Il vous aide également lors de la gestion de tous vos certificats. C’est-à-dire que depuis un seul hébergeur, vous avez la possibilité d’obtenir et de renouveler les certificats.

Maintenant, avec HTTPS activé, vous pouvez appliquer le chiffrement à toutes les connexions à votre équilibreur de charge. Pour cela, il faut effectuer une mise à jour du serveur écoutant le port 80 avec une redirection vers le port HTTPS. Voici un exemple de cas :

server {
   listen 80;
   server_name domain_name;
   return 301 https://$server_name$request_uri;

   #location / {
   #   proxy_pass http://backend;
   #}}

Sauvegardez les modifications, puis redémarrez Nginx.

sudo systemctl redémarrer nginx

Les commandes NGInx

À ce niveau de l’article, vous connaissez déjà les principes de Nginx ainsi que la manière de l’installer et de le configurer. Dans les sections qui suivent, vous allez découvrir quelques commandes de base.

L’unité centrale de commande nginx.conf

Nginx est basé sur des événements, car il considère certaines demandes comme des événements et non comme un nouveau processus de travail. Ces événements sont répartis sur les processus fils existants et maintenus par le processus père.

La gestion et la prise en charge des nouvelles configurations par les processus

Quand vous finissez d’installer Nginx, celui-ci se lance automatiquement, mais vous pouvez aussi le lancer avec la commande suivante : 

sudo service nginx start

Une fois le serveur en marche, vous pouvez le contrôler en déterminant le processus grâce à certaines commandes : 

sudo nginx -s signal

-s est un paramètre qui indique un signal. Il existe quatre types de signaux que vous pouvez envoyer :

  1. stop : Nginx est arrêté en même temps ;
  2. quit : Nginx est arrêté une fois que les requêtes actives ont obtenu leur réponse ;
  3. reload : le fichier de configuration se charge à nouveau ;
  4. reopen : les log-files sont lancés à nouveau.

Le signal reload est une bonne manière de charger les modifications que vous avez apportées à votre fichier de configuration sans même que vous ayez à interrompre ou redémarrer le serveur web. 

De toute façon, il vous sera demandé d’effectuer un redémarrage complet du serveur ou un simple reload Nginx pour que vos modifications soient prises en compte. Cependant, si vous avez décidé de faire un reload Nginx, alors le processus reçoit l’instruction de prendre en compte les modifications dans le fichier nginx.conf.

La syntaxe de la commande est vérifiée et si le retour est positif, le processus commence le travail en apportant les modifications et en interrompant les anciens processus. Mais si la syntaxe n’est pas correcte, l’ancien état du fichier nginx.conf est conservé.

Grâce à des outils tels que kill, vous avez la possibilité de cibler précisément vos processus. Vous pouvez envoyer un signal sur un processus précis grâce à son identifiant. Par exemple, interrompons le processus ayant comme id 1529 avec la commande suivante :

sudo kill -s quit 1529

Apache ou NGInx ?

D’après le rapport de W3Techs, Nginx est le serveur le plus utilisé par les sites populaires au monde. Sur les 1000 sites les plus importants disponibles sur le web, plus de 33% utilisent Nginx, 30% utilisent Apache et enfin plus de 6% utilise Microsoft Internet information (IIS). 

w3techs-stat

Siftery a fourni des données qui montrent les entreprises bénéficiant des avantages de Nginx. Nous avons entre autres : Google, Facebook, LinkedIn, Cisco, Autodesk, T-Mobile, GitLab, Microsoft, IBM, Adobe, Salesforce, VMware, Xerox, Citrix Systems, Twitter, Apple, Intel. 

Il faut rappeler qu’Apache est l’un des plus anciens serveurs les plus utilisés et fiables dans le monde. Créé et entretenu par la fondation Apache, il est distribué selon le terme de la licence Apache.

Les raisons qui font qu’Apache est en train de plonger dans une décadence progressive est simple à comprendre. En effet, Apache a toujours eu du mal à se déployer et n’arrive pas à gérer des trafics de à fort volume, ce qui n’est pas le cas de Nginx. En plus, Nginx est désormais inclus dans les distributions Linux.

Meilleures pratiques de sécurité Nginx

Nginx est le serveur le plus rapide, mais il faut tout de même penser à la sécurité du serveur afin d’entretenir cette performance. Vous allez découvrir dans cette partie de cet article la manière pour sécuriser votre serveur Nginx.

SSL/TLS

La sécurité web commence avec l’implémentation de SSL, ce qui permet d’accéder au site web en HTTPS et de sécuriser les échanges de données. Suivez ces étapes afin d’implémenter SSL sur votre serveur :

Utiliser OpenSSL pour créer un CSR avec 2048 bits et sha-2 :

openssl req -nodes -new -sha256 -newkey rsa:2048 -keyout bestflare.key -out bestflare.csr

Avec cette commande, vous allez générer les fichiers CSR et les fichiers clés au travail actif. Après cela, contactez une autorité de certification pour signer la CSR. Une fois cela fait, implémentez votre certificat dans Nginx comme suit : 

  • Lancez votre serveur Nginx ;
  • Ouvrez le fichier ssl.conf qui se trouve dans le dossier conf ;
  • Modifiez le fichier comme suit :
server { 
listen 443 ssl; 
server_name bestflare.com; 
ssl on; 
ssl_certificate /opt/cert/bestflare.pem; ssl_certificate_key /opt/cert/bestflare.key; 
}

Remarque : Il faut modifier le certificat et le chemin du fichier clé.

  • Sauvegarder la configuration puis redémarrer le serveur. Ainsi, vous avez le certificat SSL implémenté avec succès.

Voilà, nous arrivons à la fin de cet article, vous savez maintenant comment le configurer, l’utiliser et sécuriser votre serveur web. Nginx fait partie des meilleures sociétés de serveur web et de nos jours au point où il est plus sollicité qu’Apache. Pour faire court, il faut comprendre que Nginx est rapide, fiable et peut gérer plusieurs problèmes en même temps. Alors, n’hésitez pas à utiliser le serveur Nginx si vous avez un site web.

Si vous souhaitez lire d’autres articles sur la programmation informatique ou sur le Big Data, vous pouvez parcourir notre blog. Nous vous invitons également à télécharger cette formation sur Scala si vous souhaitez approfondir vos connaissances en Big Data.


Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

>