Sélectionner une page

[Rocky Linux] Installation et configuration Nginx

par | Jan 26, 2022 | Linux | 0 commentaires

Introduction

Rocky Linux est la suite de CentOS project qui fut arrêté en décembre 2021.

Ici je vais l’installer sur une machine virtuelle sous Proxmox. Je vais passer volontairement la mise en place du serveur, mais c’est une installation standard, afin de minimiser les ressources.

Ca sera donc la seule contrainte à mettre en place, mais cela n’influence pas du tout sur l’installation. Vous pouvez aussi le faire en mode graphique, cela ne changera rien du tout.

IMPORTANT :
Si vous êtes non utilisateur root, il faudra avoir les droits root sur cette machine et ajouter toutes les commandes en mode root.

1. Installation de Nginx

En premier, il est recommandé d’installer les dernière mise à jour de Rocky Linux

sudo dnf update -y

Pour installer Nginx, il faut d’abord installer le « EPEL repository ». Ce n’est pas une obligation, mais c’est toujours mieux de l’installer dès le départ.

sudo dnf install epel-release – y

Ensuite nous pouvons installer nginx et l’éditeur nano

sudo dnf install nginx nano – y

Pour informartion, le -y signifie qu’il va valider automatiquement toutes les installations, sans demander de confirmation.

2. Configuration

2.1 Configuration par defaut

Par defaut, Nginx est configuré pour travailler à la fois avec des adresses en IPv4 et en IPv6. Si cette dernière n’est pas configurée sur le serveur, comme souvent, alors le serveur web ne démarrera pas. Pour ce faire, nous allons aller dans le fichier de configuration de Nginx et le modifier.
Mais avant de faire cela, nous allons copier ce fichier, de tel sorte qu’en cas de problème, ou de mauvaise manipulation, nous pouvons le récupérer.

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bk

Note : depuis les dernières versions de nginx, il y a maintenant un fichier nginx.conf.default

Maintenant, passons par nano pour éditer le fichier nginx.conf

Nano /etc/nginx/nginx.conf

Chercher dans le fichier la ligne suivante et la commenter en ajoutant un # au début.

listen [::]:80 default_server;

ce qui donnera comme résultat :

nano - nginx

On peut sauver le fichier et quitter en faisant ctrl +o et en validant, puis ctrl + x pour quitter nano.

Et vérifier si il n’y pas d’erreur avec la commande suivante :

Nginx -t

À la sortie nous devrions obtenir ceci :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

2.2 commandes de base de Nginx

Démarage de nginx :

[root@srv-web ~]# systemctl start nginx

Arrêter nginx

[root@srv-web ~]# systemctl stop nginx

Etat de nginx

[root@srv-web ~]# systemctl status nginx

Activation de nginx au démarrage du système

[root@srv-web ~]# systemctl enable nginx

Relancer Nginx

[root@srv-web ~]# systemctl reload nginx

2.3 gestion du firewall

Si le firewall est actif, ce qui est le cas la plupart du temps, il faut alors lui attribuer les règles pour le trafic web, ouvrir le port 80 et le port 443

[root@srv-web ~]# firewall-cmd --zone=public --permanent --add-service=http

[root@srv-web ~]# firewall-cmd --zone=public --permanent --add-service=https

[root@srv-web ~]# firewall-cmd -- reload

3. Configuration de la localisation des fichers des sites web

Par défaut, nginx affiche une page d’information sur le site. Configurons un emplacement différent pour les fichiers du site et ajoutons notre propre page. Tout d’abord, créons les répertoires nécessaires.

[root@srv-web ~]# mkdir –p /var/www/default

Maintenant créons rapidement une page test personnalisée dans le nouveau répertoire.

[root@srv-web ~]# nano /var/www/default/index.html

(au passage avec cette ligne de commande on crée ainsi le fichier index.html)

Pour le moment, dans nano, on va juste créer une page très basique en ajoutant une balise h1.

<h1>My first page web, and it’s working</h1>

Comme le répertoire n’est plus au bon endroit pour les droits donnés à nginx au moment de son installation, mais que nous l’avons déplacé dans un autre répertoire, ici le /var, il faut donner les bons droits, donc ceux de nginx à ce répertoire

[root@srv-web ~]# chown –R nginx:nginx /var/www/default/

Nous allons utiliser l’hôte virtuel déjà présent dans la configuration de nginx et remplacer la configuration pour l’emplacement des fichiers du site.

Pour cela, repassons avec nano et ouvrons le fichier de configuration de nginx

[root@srv-web ~]# nano /etc/nginx/nginx.conf

Il faut chercher la section serveur, celle qui démarre avec l’écoute 80 default_server, et dans celle-ci le paramètre root, qui définit le chemin vers les fichiers du site. Remplaçons-le par le chemin /var/www/default/ que nous avons créé précédemment

 

server {

listen 80 default_server;

#listen [::]:80 default_server;

server_name _;

root /var/www/default/;

...

Sauvez le fichier avec ctrl – X et redémarrons le service nginx.

 

[root@srv-web ~]# systemctl restart nginx

4. Modification de SELinux

4.1 Comprendre l’erreur 403

Certains sites, voir beaucoup trop, diront qu’à cette étape, vous pouvez faire une requête sur votre site, via l’adresse IP, mais cela va vous donnez une erreur 403 forbiden.

L’erreur 403 vient souvent du faire que le système n’a pas les droits nécessaires pour lire le fichier. Ou plutôt que le serveur refuse d’exécuter une requête qu’il a pourtant comprise.

Sur les distribution Linux comme REHL, notamment CentOS et Rocky Linux, SeLinux est souvent activer. Il n’est pas question ici de faire un cours sur SELinux, mais au moins comprendre son utilité.

Le meilleur moyen de comprendre à quoi il sert, est d’aller directement à la source, c’est-à-dire chez RedHat. Pour vous épargnez trop de lecture, mais au moins comprendre ce que nous allons faire, voici l’introduction.

“SELinux définit les contrôles d’accès pour les applications, processus et fichiers d’un système. Il utilise des politiques de sécurité, c’est-à-dire des ensembles de règles qui lui indiquent ce à quoi un utilisateur peut accéder ou non, pour mettre en application les autorisations d’accès définies par une politique. 

Lorsqu’un sujet (une application ou un processus) envoie une requête pour accéder à un objet (par exemple un fichier), SELinux consulte un cache AVC (Access Vector Cache) où sont temporairement stockées les autorisations d’accès pour les différents sujets et objets.”

Si vous laissez dans l’état actuel votre serveur, avec la configuration faite jusqu’au point 3, vous allez effectivement vous retrouvez avec une erreur 403. Ce qui est logique, on a demandé à Nginx que son répertoire racine ne se trouve plus à son endroit initial, là ou il a les droits d’excécuter toutes les requêtes web, mais vers un autre chemin qui à la base ne lui est pas destiné. Le système ne peut pas lui autoriser à exécuter cette tâche et donc… : erreur 403.

4.2 changement dans SELinux

Activer la fonctionnalité SELinux « httpdcannetwork_connect »

[root@srv-web ~]# setsebool -P httpd_can_network_connect on

Vérifier le niveau de sécurité de SELinux

 

[root@srv-web ~]# enforcing

Si c’est enforcing, faites un:

 

[root@srv-web ~]# chcon -Rt httpd_sys_content_t /path/to/www

Il faut bien évidemment remplacer /path/to/www par le chemin correspondant à votre répertoire. Ici c’est /var/www/default/

 

Sources de l’article