Voici 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
ouserver
sont des contextes, alors queuser
,worker_processes
outry_files
sont des directives. - Nginx n’est pas censé tourner en tant que
root
, mais en tant qu’utilisateur systèmenginx
. - La directive
worker_processes
spécifie le nombre de workers qu’il faut créer au démarrage de Nginx. Pour les apercevoir clairement, invoquezsystemctl status nginx
. Idéalement, vous définirez autant de workers que vous disposez de coeurs CPU. La directiveauto
s’en charge automatiquement. - Dans le contexte
events
, la directiveworker_connections
spécifie le maximum de connexions simultanées au serveur. Sous Linux, la commandeulimit -n
vous affiche le maximum de fichiers qui peuvent être ouverts simultanément. Utilisez cette valeur. - Notez que
worker_processes
xworker_connections
= nombre total de connexions simultanées au serveur. Sur mon serveur Dedibox, la commandenproc
me retourne la valeur2
, etulimit -n
affiche1024
. J’obtiens donc un total de 2 x 1024 = 2048 connexions simultanées possibles. - Dans le contexte
http
, la directiveinclude 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 contexteserver
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
ethttp://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 contexteserver
que dans un contextelocation
.
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.
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