EEIJ

Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux


Sommaire


Conforme à XHTML 1.0 Strict Conforme à CSS!

On se lasse de tout, sauf de comprendre.
Attribué à Virgile.

Installer et configurer le serveur web Nginx

Historique

31 octobre 2013 : nouvelle page.
7 mars 2014 : correction du fichier /etc/nginx/nginx.conf, avec php. Fichiers de configuration éclatés

Difficulté

Pour : utilisateur un peu curieux.

Introduction

Nginx est un serveur HTTP libre, open-source et haute performance, ainsi qu'un proxy inverse (proxy situé devant un ou plusieurs serveurs).
Même si vous n'avez pas besoin de gérer des milliers de requêtes simultanées, vous pouvez bénéficier des hautes performances de Nginx ainsi que de sa faible empreinte mémoire.

Haut

Installation

Le paquetage s'appelle nginx. L'installation peut se faire :

Haut

Configuration

Préliminaires

Nginx un serveur HTTP assez simple. Il a, dans sa configuration, quelques spécificités dont il faut être conscient, avant de commencer à configurer le serveur.
La plus importante est que Nginx est en premier lieu un proxy inverse mais est également un serveur HTTP.
Il s'occupe donc d'URL plutôt que de fichiers. Cela change la façon de configurer Nginx.

Fichiers de configuration

Le fichier de configuration est /etc/nginx/nginx.conf
Attention : Une partie de la configuration peut se trouver dans un "sous-fichier" : /etc/nginx/conf.d/default.conf

Syntaxe des directives

Les lignes débutant par le caractère dièse (#) représentent des commentaires et sont ignorées.
Le fichier par défaut en possède déjà quelques unes, mais vous pouvez y ajouter les vôtres.

Les directives commencent par le nom d'une variable (par example, worker_processes ou pid), suivi d'un argument simple (par example, 1 ou logs/nginx.pid) ou suivi d'une série d'arguments séparés par un espace (par example, logs/error.log notice). Elles sont toujours terminées par un ;

Les espaces ou tabulations en début de ligne ne sont pas pris en compte par nginx. N'hésitez pas à en utiliser pour rendre votre fichier bien lisible.

Haut

Blocs hiérarchiques

Il est important de savoir que le système de configuration utilise une hiérarchies de blocs de configuration.
Les directives d'un bloc élevé seront considérées comme des valeurs par défaut par les blocs situés plus bas dans la hiérarchie.
Il est donc intéressant de spécifier les directives dans le bloc de niveau le plus élévé, quand cela est possible.

Différents blocs

Il y a 3 hiérarchies qui sont habituellement mentionnées comme blocs :

  1. le bloc HTTP
  2. le bloc serveur
  3. le bloc location

Il y a également deux blocs spéciaux, un bloc event et un bloc racine dans lequel résident le bloc event et le bloc http.
Ces deux bloc ne peuvent contenir qu'une quantité limitée de directives. Ce sont essentiellement les trois autres blocs qui seront concernés par la configuration.

La hiérarchie est la suivante : racine —> http —> server —> location.

Les blocs sont délimités par des accolades {}.

Haut

Le bloc racine

En fait, c'est tout le fichier de configuration. Il n'est pas délimité.
Voici les directives directement contenues :

#user        nobody;
worker_processes  1;
#error_log   logs/error.log;
#error_log   logs/error.log notice;
#error_log   logs/error.log info;
#pid         logs/nginx.pid;

La directive valide est :
worker_processes 1; Il est recommandé de mettre autant de worker processes que de cores disponibles sur votre serveur. À corriger éventuellement.
Vous pouvez l'obtenir avec la commande grep processor /proc/cpuinfo | wc -l

Le bloc events

events {;
  worker_connections 1024;
}

Le bloc events ne possède qu'une seule directive, encadrée par les {}.
worker_connections 1024; qui indique le nombre maximal de connexions par processeur. Le nombre maximal de clients connectés est donné par :
max_clients = worker_processes * worker_connections
Un millier est une valeur raisonnable, mais pour un serveur peu consulté, vous pouvez diminuer.

Haut

Le bloc http (Configuration générale)

Le bloc http couvre les directives générales lorsque Nginx traite le trafic HTTP.
Voici le contenu par défaut, sans les blocs de niveau inférieur (server et location) :

http {
  include       mime.types;
  default_type  application/octet-stream;

  #log_format   main '$remote_addr - $remote_user [$time_local] "$request" '
  #                  '$status $body_bytes_sent "$http_referer" '
  #                  '"$http_user_agent" "$http_x_forwarded_for"';
  #access_log   logs/access.log main;

  sendfile      on;
  #tcp_nopush   on;
  #keepalive_timeout 0;

  keepalive_timeout 65;
  #gzip         on;
}

Le fichier mime.types est intégré à la configuration et le type par défaut est application/octet-stream,
la journalisation peut être modifiée (format, accès),
sendfile : permet d'optimiser le transfert des données,
tpo_nopush : permet de forcer Nginx à essayer d'envoyer ses en-têtes de réponse HTTP dans un paquet,
keepalive_timeout : permet de conserver une connexion active pendant un certain nombre de secondes,
gzip : permet de compacter les données avant expédition.

Haut

Le bloc server (Configuration des hôtes virtuels)

Nginx décide d'abord quel serveur va traiter une demande.

Vous pouvez avoir, ici, un seul ou plusieurs blocs (si vous avez des hôtes virtuels).

Ce(s) bloc(s) est(sont) contenu(s) dans le bloc http {}
Voici le contenu du bloc principal, à nouveau, sans le bloc intégré (location) :

server {
  listen       80;
  server_name  localhost;

  #charset     koi8-r;
  #access_log  logs/host.access.log  main;

}

listen : indique adresse et/ou port sur lesquels le serveur écoute. (Exemples 80, 127.0.0.1:80, localhost:80, localhost:8080, 192.168.3.105:80 ...). Vous pouvez préciser plusieurs lignes,

server_name : permet de fournir un hébergement virtuel basé sur le nom d'hôte. Exemples :
example.com, example.com www.example.com (répond aux deux noms, avec le même serveur), example.* (répond à exemple.com, exemple.fr, exemple.eu ...), *.example.com (répond à tous les sous-domaines de exemple.com),

charset koi8-r : permet d'inclure les caractères russes

access_log : indique l'emplacement du journal des connexions (soit absolu, soit relatif au répertoire actuel = /etc/nginx/). Permet également de désactiver avec off.

Haut

Le bloc location

Il se trouve dans le bloc server {} et permet de définir l'emplacement du site et le fichier d'accueil.

location / {
  root       html;
  index      index.html index.htm;
}

Ici, le bloc définit la racine "/" du site

root : emplacement (soit absolu, soit relatif au répertoire actuel = /etc/nginx/)

index : noms possibles des fichiers d'accueil

Haut

Ajustement de la configuration

La configuration par défaut convient pratiquement en totalité, à part l'emplacement de la racine du site.
Les modifications se font en éditant le fichier de configuration après avoir sauvegardé l'original.

Au choix :

Emplacement du site

Dans le bloc location {}, modifiez la ligne
root  html; par root  /var/www/html; ou par votre emplacement.

Traitement des erreurs

Il est possible de personnaliser le traitement des erreurs et c'est dans le bloc server. Il faut, bien sûr, avoir des pages personnalisées. Voici les lignes à décommenter et à adapter, au besoin :

server {
  #error_page  404     /404.html;
  #error_page  500 502 503 504  /50x.html;
  #location = /50x.html {
  #  root  html;
  #}

}

Haut

Traitement des pages PHP

Nginx peut également traiter les cripts php, àl'aide de php-fpm

Installation

L'installation du paquetage php-fpm, avec ses dépendances, peut se faire avec le Centre de Contrôle ou avec la commande urpmi php-fpm

Configuration de php-fpm

La configuration par défaut demande peu de modifications. Le fichier est /etc/php-fpm.conf
Modifiez les 4 lignes comme ci-dessous :

user   nginx
group  nginx
listen = 127.0.0.1:9000

; listen = /var/lib/php-fpm/php-fpm.sock

Par défaut, user et group sont définis comme étant apache.
Par ailleus, l'écoute doit se faire sur 127.0.0.1:9000.

Configuration de Nginx

Il faut valider la prise en compte de php. C'est dans le bloc server du fichier /etc/nginx/nginx.conf
Il faut dé-commenter les lignes suivantes et corriger au besoin :

server {
  location ~ \.php$ {
    root           /var/www/html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }

}

Haut

Configuration du pare-feu

Si le serveur Web intègre un pare-feu ou est placé derrière un pare-feu, vous devrez ouvrir les ports utilisés par Nginx.

Haut

Redémarrage des serveurs

Maintenant que tout est installé et configuré, il ne reste plus qu'à relancer les serveurs afin qu'ils prennent en compte la nouvelle configuration.

Haut