2.2. Configurer NGINX comme un serveur web qui fournit un contenu différent pour différents domaines
Par défaut, NGINX agit comme un serveur web qui fournit le même contenu aux clients pour tous les noms de domaine associés aux adresses IP du serveur. Cette procédure explique comment configurer NGINX :
-
Pour servir les requêtes au domaine
example.com
avec le contenu du répertoire/var/www/example.com/
-
Pour servir les requêtes au domaine
example.net
avec le contenu du répertoire/var/www/example.net/
-
Servir toutes les autres demandes, par exemple à l'adresse IP du serveur ou à d'autres domaines associés à l'adresse IP du serveur, avec le contenu du répertoire
/usr/share/nginx/html/
Conditions préalables
- NGINX est installé
Les clients et le serveur web résolvent les domaines
example.com
etexample.net
en fonction de l'adresse IP du serveur web.Notez que vous devez ajouter manuellement ces entrées à votre serveur DNS.
Procédure
Modifiez le fichier
/etc/nginx/nginx.conf
:Par défaut, le fichier
/etc/nginx/nginx.conf
contient déjà une configuration "catch-all". Si vous avez supprimé cette partie de la configuration, ajoutez à nouveau le blocserver
au blochttp
dans le fichier/etc/nginx/nginx.conf
:server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; }
Ces paramètres permettent de configurer les éléments suivants :
-
La directive
listen
définit l'adresse IP et les ports que le service écoute. Dans ce cas, NGINX écoute sur le port80
sur toutes les adresses IPv4 et IPv6. Le paramètredefault_server
indique que NGINX utilise ce blocserver
par défaut pour les requêtes correspondant aux adresses IP et aux ports. -
Le paramètre
server_name
définit les noms d'hôtes dont ce blocserver
est responsable. La configuration deserver_name
à_
permet à NGINX d'accepter n'importe quel nom d'hôte pour ce blocserver
. -
La directive
root
définit le chemin d'accès au contenu web pour ce blocserver
.
-
La directive
Ajoutez au bloc
http
un blocserver
similaire pour le domaineexample.com
:server { server_name example.com; root /var/www/example.com/; access_log /var/log/nginx/example.com/access.log; error_log /var/log/nginx/example.com/error.log; }
-
La directive
access_log
définit un fichier journal d'accès distinct pour ce domaine. -
La directive
error_log
définit un fichier journal des erreurs distinct pour ce domaine.
-
La directive
Ajoutez au bloc
http
un blocserver
similaire pour le domaineexample.net
:server { server_name example.net; root /var/www/example.net/; access_log /var/log/nginx/example.net/access.log; error_log /var/log/nginx/example.net/error.log; }
Créez les répertoires racine pour les deux domaines :
# mkdir -p /var/www/example.com/ # mkdir -p /var/www/example.net/
Définir le contexte
httpd_sys_content_t
sur les deux répertoires racine :# semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?" # restorecon -Rv /var/www/example.com/ # semanage fcontext -a -t httpd_sys_content_t "/var/www/example.net(/.\*)?" # restorecon -Rv /var/www/example.net/
Ces commandes définissent le contexte
httpd_sys_content_t
sur les répertoires/var/www/example.com/
et/var/www/example.net/
.Notez que vous devez installer le paquetage
policycoreutils-python-utils
pour exécuter les commandesrestorecon
.Créez les répertoires de journaux pour les deux domaines :
# mkdir /var/log/nginx/example.com/ # mkdir /var/log/nginx/example.net/
Redémarrez le service
nginx
:# systemctl restart nginx
Verification steps
Créez un fichier d'exemple différent dans la racine du document de chaque hôte virtuel :
# echo "Content for example.com" > /var/www/example.com/index.html # echo "Content for example.net" > /var/www/example.net/index.html # echo "Catch All content" > /usr/share/nginx/html/index.html
-
Utilisez un navigateur et connectez-vous à
http://example.com
. Le serveur web affiche l'exemple de contenu du fichier/var/www/example.com/index.html
. -
Utilisez un navigateur et connectez-vous à
http://example.net
. Le serveur web affiche l'exemple de contenu du fichier/var/www/example.net/index.html
. -
Utilisez un navigateur et connectez-vous à
http://IP_address_of_the_server
. Le serveur web affiche l'exemple de contenu du fichier/usr/share/nginx/html/index.html
.