Nginx LogoVoici notre troisième article dans la série sur Nginx. Notre précédent article traitait de la configuration de base du serveur et de l’hébergement d’un site statique simple. Aujourd’hui nous allons aborder l’hébergement de plusieurs sites statiques sur une même machine. Pour les habitués du serveur Apache, c’est l’équivalent des hôtes virtuels (virtual hosts).

Héberger plusieurs sites statiques

Dans l’état actuel des choses, nous disposons d’un site statique http://www.slackbox.fr qui affiche la documentation de Slackware rangée dans l’arborescence /var/www/slackbox-site/html du serveur.

Nginx site statique

Notre objectif pour aujourd’hui consiste à héberger le site http://www.unixbox.fr qui affichera la documentation de FreeBSD rangée dans l’arborescence /var/www/unixbox-site/html. Là aussi, il faudra veiller à configurer les DNS au préalable.

$ cd /var/www/
$ sudo mkdir -pv unixbox-site/html
mkdir: created directory ‘unixbox-site’
mkdir: created directory ‘unixbox-site/html’
$ sudo chown -R microlinux:microlinux unixbox-site/
$ cd unixbox-site/html/
$ wget -r -p -np -nH --cut-dirs=4 \
  http://www.freebsd.org/doc/fr_FR.ISO8859-1/books/handbook/

Par ailleurs, la page par défaut de Nginx – c’est-à-dire le contenu de l’arborescence /usr/share/nginx/html – devra s’afficher à l’adresse http://sd-100246.dedibox.fr.

Nginx CentOS

Dans un premier temps, nous allons reconfigurer /etc/nginx/nginx.conf pour afficher cette page par défaut.

# /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 default_server;
   server_name sd-100246.dedibox.fr;
   root /usr/share/nginx/html;
   access_log /var/log/nginx/sd-100246.dedibox.fr-access.log;
   error_log  /var/log/nginx/sd-100246.dedibox.fr-error.log;
   try_files $uri $uri/ =404;
 }
}

À ce stade, nous pouvons déjà tester la configuration de la page par défaut avant de la prendre en compte.

$ 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

En théorie, rien ne nous empêche d’ajouter deux stances server { } à /etc/nginx/nginx.conf pour configurer les hébergements www.slackbox.fr et www.unixbox.fr. En pratique, nous allons délocaliser ces configurations respectives dans une paire de fichiers situés dans /etc/nginx/conf.d. C’est un peu la même chose que ce que nous faisons avec Apache et les fichiers de configuration situés dans /etc/httpd/conf.d. On obtient ainsi une configuration plus lisible, surtout pour les machines hébergeant un nombre important de sites.

Nous devons d’abord indiquer à notre fichier de configuration principal qu’il faut tenir compte du contenu de /etc/nginx/conf.d.

# /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
events {
  worker_connections 1024;
}
http {
 include mime.types; 
 include conf.d/*.conf;
 index index.htm index.html;
 server {
   listen 80 default_server;
   server_name sd-100246.dedibox.fr;
   root /usr/share/nginx/html;
   access_log /var/log/nginx/sd-100246.dedibox.fr-access.log;
   error_log  /var/log/nginx/sd-100246.dedibox.fr-error.log;
   try_files $uri $uri/ =404;
 }
}

La configuration du site www.slackbox.fr sera rangée dans le fichier /etc/nginx/conf.d/www.slackbox.fr.conf.

# /etc/nginx/conf.d/www.slackbox.fr.conf
server {
  listen 80;
  server_name slackbox.fr www.slackbox.fr;
  root /var/www/slackbox-site/html;
  access_log /var/log/nginx/www.slackbox.fr-access.log;
  error_log  /var/log/nginx/www.slackbox.fr-error.log;
  try_files $uri $uri/ =404;
}

De même, le fichier conf.d/www.unixbox.fr.conf contiendra la configuration du site www.unixbox.fr.

# /etc/nginx/conf.d/www.unixbox.fr.conf
server {
  listen 80;
  server_name unixbox.fr www.unixbox.fr;
  root /var/www/unixbox-site/html;
  access_log /var/log/nginx/www.unixbox.fr-access.log;
  error_log  /var/log/nginx/www.unixbox.fr-error.log;
  try_files $uri $uri/ =404;
}

Tester et recharger la configuration.

$ 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

Tester successivement l’affichage des sites hébergés dans un navigateur web.

Nginx site statique

La suite au prochain numéro, où nous parlerons de l’hébergement de pages dynamiques.

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.


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.