Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux
On se lasse de tout, sauf de comprendre.
Attribué à Virgile.
31 octobre 2013 : nouvelle page.
7 mars 2014 : correction du fichier /etc/nginx/nginx.conf, avec php. Fichiers de configuration éclatés
Pour : utilisateur un peu curieux.
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.
Le paquetage s'appelle nginx. L'installation peut se faire :
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.
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
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.
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.
Il y a 3 hiérarchies qui sont habituellement mentionnées comme blocs :
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 {}.
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
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.
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.
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.
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
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 :
Dans le bloc location {}, modifiez la ligne
root html; par root /var/www/html; ou par votre emplacement.
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;
#}
}
Nginx peut également traiter les cripts php, àl'aide de php-fpm
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
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.
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;
}
}
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.
Maintenant que tout est installé et configuré, il ne reste plus qu'à relancer les serveurs afin qu'ils prennent en compte la nouvelle configuration.