Nginx LogoVoici notre deuxième article dans la série sur Nginx. Notre précédent article traitait de l’installation et de la mise en service du serveur web. Aujourd’hui nous allons aborder les bases de la configuration et l’hébergement d’un site statique simple.

Récupérer du contenu à héberger

Pour nous épargner la corvée de créer du contenu bidon, nous pouvons très bien récupérer un site web existant. On choisira la documentation de Slackware, qui vient sous forme d’une série de pages HTML statiques.

$ sudo mkdir -pv /var/www/slackbox-site/html
mkdir: created directory ‘/var/www’
mkdir: created directory ‘/var/www/slackbox-site’
mkdir: created directory ‘/var/www/slackbox-site/html’
$ sudo chown -R microlinux:microlinux /var/www/slackbox-site/
$ cd /var/www/slackbox-site/html/
$ wget -r -np -nH --cut-dirs=1 http://www.slackbook.org/html/

Nginx et SELinux

Nous risquons de nous retrouver confrontés à un problème inattendu avec SELinux. En temps normal, les pages web à héberger sont censées être étiquetées httpd_sys_content_t. Or, il se trouve que lorsque nous créons manuellement notre arborescence /var/www, ls -Z affiche une étiquette incorrecte var_t. Dans ce cas, il suffit de rectifier le tir en appliquant le contexte prédéfini avec restorecon.

$ sudo mkdir -v /var/www
mkdir: created directory ‘/var/www’
$ ls -dZ /var/www/
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 /var/www/
$ matchpathcon /var/www
/var/www system_u:object_r:httpd_sys_content_t:s0
$ sudo restorecon -R -v /var/www/
restorecon reset /var/www context unconfined_u:object_r:var_t:s0
->unconfined_u:object_r:httpd_sys_content_t:s0

Configurer Nginx

Les fichiers de configuration de Nginx se trouvent dans /etc/nginx. Le paquet fourni par le dépôt tiers EPEL fournit deux fichiers nginx.conf et nginx.conf.default. Attention, ces fichiers ne sont pas identiques, comme on pourrait s’y attendre. Avant toute chose, nous allons donc sauvegarder la configuration existante.

$ cd /etc/nginx/
$ sudo mv nginx.conf nginx.conf.orig

Héberger un site statique

Pour héberger notre site statique, nous allons partir de la configuration suivante.

# /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
events {
  worker_connections 1024;
}
http {
 include mime.types;
 index index.htm index.html;
 server {
   listen 80;
   server_name slackbox.fr www.slackbox.fr;
   root /var/www/slackbox-site/html;
   try_files $uri $uri/ =404;
 }
}

La syntaxe de configuration de Nginx est un peu particulière et mérite quelques explications.

  • Nginx distingue les contextes et les directives. Dans le fichier ci-dessus, events, http ou server sont des contextes, alors que user, worker_processes ou try_files sont des directives.
  • Nginx n’est pas censé tourner en tant que root, mais en tant qu’utilisateur système nginx.
  • La directive worker_processes spécifie le nombre de workers qu’il faut créer au démarrage de Nginx. Pour les apercevoir clairement, invoquez systemctl status nginx. Idéalement, vous définirez autant de workers que vous disposez de coeurs CPU. La directive auto s’en charge automatiquement.
  • Dans le contexte events, la directive worker_connections spécifie le maximum de connexions simultanées au serveur. Sous Linux, la commande ulimit -n vous affiche le maximum de fichiers qui peuvent être ouverts simultanément. Utilisez cette valeur.
  • Notez que worker_processes x worker_connections = nombre total de connexions simultanées au serveur. Sur mon serveur Dedibox, la commande nproc me retourne la valeur 2, et ulimit -n affiche 1024. J’obtiens donc un total de 2 x 1024 = 2048 connexions simultanées possibles.
  • Dans le contexte http, la directive include mime.types charge le fichier /etc/nginx/mime.types qui permet la gestion correcte des différents types de fichiers comme les feuilles de style CSS, les images JPG et PNG, et beaucoup d’autres types de fichiers.
  • La directive index définit le ou les fichiers qui seront utilisés comme index si la requête vise un répertoire.
  • La directive listen 80 dans le contexte server spécifie le port d’écoute de Nginx. Elle n’est pas vraiment nécessaire, mais c’est considéré comme une bonne pratique de la spécifier quand-même.
  • Notre site sera joignable sous l’adresse http://slackbox.fr et http://www.slackbox.fr. Bien évidemment, cela nécessite une configuration correcte des DNS en amont.
  • La directive root indique la racine de notre hébergement dans le système de fichiers local.
  • La directive try_files essaie à tour de rôle d’ouvrir les fichiers spécifiés en argument. En l’occurrence, la variable $uri représente la requête, $uri/ ajoute un / à la requête, et si ces deux tentatives échouent, on est redirigé vers la page d’erreur 404.
  • Note pour les chipoteurs : la directive try_files peut s’utiliser aussi bien dans un contexte server que dans un contexte location.

Avant de prendre en compte la nouvelle configuration, ce n’est pas une mauvaise idée de la tester.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx

Il ne reste plus qu’à afficher le site dans un navigateur web.

Nginx site statique

La suite au prochain numéro, où nous verrons comment héberger plusieurs sites sur le même serveur.

Post Scriptum 31 décembre 2019 : J’ai corrigé une petite erreur relative à la directive index censée figurer dans le contexte http – et non pas server. C’est décrit en détail ici.

Post Scriptum 1er janvier 2020 : J’ai ajouté une section sur SELinux, qui crée des problèmes inattendus.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


0 commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.