AXOPEN

NGINX tutorial

Qu’est ce que NGINX?

NGINX est un « nouveau » serveur WEB apparu en 2002 qui vient concurrencer de plus en plus APACHE, qui reste pour l’instant majoritaire. Dans cet article, nous allons faire une courte introduction sur NGINX.

Pourquoi NGINX?

NGINX à la différence d’APACHE, n’utilise pas un modèle Thread Driven mais un modèle Event Driven. La différence principale entre ces deux approches est la suivante:

Modèle Thread Driven

Dans un modèle Thread Driven, un thread est créé dès qu’un client demande une page web. Ce thread va être responsable du traitement de l’intégralité de la page web. Quand ce thread attend une I/O (entrée / sortie), il se bloque et passe son tour au prochain Thread. Cette stratégie pose problème dans le cas d’un très grand nombre de connexions simultanées car, un très grand nombre de thread sont créés et se bloquent les uns les autres. De plus, comme chaque thread possède sa propre pile d’appel et son pointeur d’instruction, une overhead non négligeable est à prendre en compte. Ainsi pour répondre au fameux problème c10k, cette architecture ne semble pas (plus) la mieux adaptée.

Modèle Event Driven

Dans un modèle Event Driven, au contraire on ne retrouve « qu’un seul thread » qui traite toutes les requêtes puis les dispatche sur des handlers compétents qui eux même redispathent si nécessaire. Dans cette approche, très peut de thread sont créées, ce qui améliore les performance générale de cette approche dans le cas du problème c10k. Pour information, NGINX utilise le pattern de conception réactor.

Problème c10k

Pour rappel, ce problème est celui d’être en mesure de gérer 10 000 connexions simultanées sur un serveur web (ce qui est le cas de plus en plus de site web actuel)

Installation de NGINX.

Pour ceux qui possède une debian ou une distribution avec gestionnaire de paquet, l’installation de NGINX est triviale et se résume le plus souvent à un apt-get install nginx. (ou équivalent).

Il est aussi possible de le compiler très simplement depuis les sources. Ceci s’avère utile quand l’on souhaite utiliser des modules qui ne sont pas fournis par défaut dans les distributions, ou que l’on souhaite utiliser un version différente de la version stable.

Dans la version de base d’NGINX (qui se prononce engine-x), on trouve les modules suivants, ces modules ne peuvent pas être désactivés:

Nom Description
Core module Outils et directives essentiels tels la gestion des processus ou la sécurité
Events module Permet de configurer les mécanismes internes de la capacité de mise en réseau
Configuration module Permet d’utiliser le système d’inclusion

L’intégralité de la configuration de ces modules se trouve dans le fichier nginx.conf.

Voici les autres fichiers de configurations d’NGINX.

Nom Description
nginx.conf Configuration de base de l’application
mime.types Une liste d’extensions de fichiers avec leurs types MIME associés
Fastcgi.conf FastCgi configuration
Proxy.conf Configuration Proxy

 

Configuration NGINX les basiques

Diminutifs

Vous pouvez utiliser des diminutifs dans les valeurs de vos directives.

  • k or K: Kilobytes
  • m or M: Megabytes

Variables

Les modules fournissent également des variables qui peuvent être utilisées dans la définition des valeurs des directives.

Par exemple, le module de base Nginx HTTP définit la variable $nginx_version.

Les variables dans Nginx commencent toujours par « $ »-le signe de dollar.

Chaînes de caractères

Les chaînes de caractère peuvent être écrites de plusieurs manières différentes :

  1. Sans côtes :  root /home/axopen.com/www;
  2. Avec des simples côtes : root ‘/home/axopen.com/my web pages’;
  3. Avec un backslash

 

Configuration de base NGINX

Dans le fichier nginx.conf, les paramètres importants sont les suivants:

user nginx nginx; // Spécifie l’utilisateur et le groupe avec lequel le serveur est lancé

worker_processes 4; // Spécifie le nombre de worker process. Mettre le nombre de coeur CPU que vous possédez si vous ne savez pas quoi mettre.

Puis il faut configurer les blocs http qui correspondent aux virtuals hosts d’APACHE. Pour ce faire, voici un exemple de configuration simple pour répondre au pages web d’un serveur nommé axopen.com. Voilà, vous avez ainsi un petit serveur HTTP basique pour traiter des requêtes avec NGINX.

 

http {
  gzip on;
  server {
    server_name axopen.com;
    listen 80;
     location / {
       try_files $uri $uri/ /index.html;
   }
  }
}

Pour en savoir plus sur NGINX: