Comment héberger plusieurs sites sous Nginx.
J’avais déjà fait par le passé un article sur Apache2 où j’expliquais comment héberger plusieurs sites web sur son serveur au travers des Virtual Hosts. Aujourd’hui, c’est au tour d’Nginx avec ses Server Blocks, qui sont donc l’équivalent des VHosts de chez Apache.
I) Setup du lab
Rien de très sorcier ici, une simple VM Debian 10 avec comme adresse IP 192.168.1.100.
Ensuite, n’oubliez pas de rajouter cette IP dans votre fichier host (que ce soit sous Windows/Linux), pour faire pointer par ex. notamax.local > 192.168.1.100, et ainsi faire de même avec vous sous-domaines comme lab.notamax.local > 192.168.1.100.
Une fois notre Debian installée, il faut donc installer Nginx. Mais avant tout, un rapide rappel comme j’ai l’habitude de faire !
II) Apache, Nginx… des infos ?
Tout d’abord Apache. Quand vous vous rendez sur un site Internet, il y a presque 50% de chances que ce dernier tourne sous Apache ! La preuve en est en avec Notamax d’ailleurs. C’est tout simplement le serveur web le plus utilisé au monde, et il est maintenu par l’Apache Software Foundation.
Pour Nginx, c’est simplement le “second serveur web Open Source le plus utilisé au monde” selon certains articles (un peu difficile d’obtenir des chiffres exactes, mais ce dernier est très utilisé et va sûrement/a déjà dépassé Apache). Il est d’origine russe, créé par Igor Sysoev, et datant de 2004.
Au départ créé pour un site russe à fort traffic, ce dernier s’est vite démocratisé et aujourd’hui de grosses multi-nationales l’utilisent ! Cisco, IBM, Google, Facebook…
Et là vous allez vous demander, c’est super mais quelles sont les différences ? “Lequel est le meilleur” comme on entend souvent ? Et bien déjà, comme souvent dans l’informatique, aucun des deux n’est “meilleur” que l’autre, il faut en premier lieu cerner le besoin qui est le vôtre.
Cela dit, pour résumer très grossièrement car j’avoue ne pas être un développeur web expérimenté et donc ne pas connaître les deux produits à 100%, ce qui ressort est que :
- Apache est plus performant pour les sites dit dynamiques, au contraire d’NGINX qui sera meilleur pour les sites statiques ;
- Apache possède un système de modules activables/désactivables, c’est en partie ce qui a contribué à son succès, même si Nginx en possède aussi depuis de nombreuses années mais peut être moins “user-friendly” ;
- NGINX supporte mieux la montée en charge et le grand nombre de requêtes, d’où le fait que ce dernier était souvent utilisé comme proxy à une époque et même encore maintenant ;
C’est plus ou moins tout ce que j’ai pu glané comme informations, de toute manière nous ne sommes pas ici pour débattre de “qui est le meilleur”, car déjà je ne le sais pas moi-même car pas assez expérimenté avec les deux solutions, et d’autre part car ce simple rappel commence à devenir long, dans sans plus attendre, allons créer nos Servers Blocks !
*Au passage, si vraiment vous voulez en savoir plus sur les avantages/inconvénients, d’autres sites/blogs en parlent bien mieux que moi, donc n’hésitez pas à chercher par vous-même car cela dépend fortement de vos besoins encore une fois !
III) Configuration d’un Server Block
Comme j’ai déjà dit en introduction, j’avais déjà fait un article sur les Virtual Hosts pour apache –ici pour les plus curieux– donc je ne vais pas vous ré-expliquer ce que c’est, nous allons directement rentrer dans le vif du sujet. Sachez simplement que ce terme de vHost est purement “Apachien”, et que chez Nginx on appelle ça des Server Blocks.
Bien, maintenant installons Nginx de manière simple :
sudo apt install nginx
Une fois installé, vous vous rendrez vite compte que concernant les Server Blocks, c’est assez semblable à Apache avec cette notion de sites-available, sites-enabled :
Voici un aperçu du Server block pour le site par défaut :
Comme vous pouvez le voir, rien de très compliqué ici : On listen sur le port 80 par défaut, on déclare le dossier racine via le paramètre root, et on déclare aussi un paramètre server_name comme pour Apache !
Faisons donc un copier-coller de ce fichier de config par défaut, et éditons-le pour arriver à un Server Block qui hébergera lab.notamax.local, avec un répertoire root en /var/www/lab/.
On va donc faire ceci, dans l’ordre (création du dossier, attribution des droits, et copie du fichier de config par défaut) :
mkdir /var/www/lab
chown -R www-data:www-data /var/www/lab
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/lab
Ensuite nous allons modifier ce fameux fichier lab, copié depuis la config par défaut pour arriver à cela :
On modifie donc simplement la racine (root), puis la directive server_name et le tour est joué !
A noter que pour la directive default_server pour la partie listen, il faudra la supprimer ; en effet, un seul de nos Server Blocks doit contenir cette directive, qui fait en sorte que si un xxx.mondomaine.com ne correspond à aucun server block, celui avec le default_server le récupérera.
Une fois fait, on créé un lien symbolique manuellement (équivalent du a2ensite chez Apache) pour activer notre site, puis on redémarre Nginx !
sudo ln -s /etc/nginx/sites-available/lab /etc/nginx/sites-enabled/
systemctl restart nginx
A noter que si vous obtenez une erreur au redémarrage du service, vérifiez que votre lien symbolique est complet, ne faites pas quelque chose comme cela :
user@debian:/etc/nginx$ ln -s sites-available/lab sites-enabled/lab
Il faut bien spécifier le chemin complet. A noter que l’on peut aussi exécuter la commande nginx -t qui permet de valider la syntaxe de nos fichiers de configs avant de redémarrer le service, cela peut toujours être utile.
*Petite note supplémentaire: si vous comptez rajouter plusieurs Server Blocks, disont par ex. minimum 5 pensez à décommenter la ligne suivante dans votre fichier /etc/nginx/nginx.conf :
# server_names_hash_bucket_size 64;
Sinon vous pourriez avoir des soucis de mémoire d’après la documentation.
IV) Vérification et conclusion
Si maintenant l’on se rend sur notamax.local puis lab.notamax.local, on devrait donc avoir deux sites différents :
Et c’est bien le cas ! Nos deux Server Blocks sont donc correctement configurés ! Comme vous aurez pu le voir, Nginx n’a rien de très compliqué comparé à Apache, et mettre en place des serveurs virtuels est donc très rapide et facile.
Sur ce, j’espère vous avoir appris quelques bricoles et vous souhaite une bonne journée/soirée !