Prérequis
- 4 VM Rocky linux
Installation d’un serveur web
Installation d’un serveur web
Pour installer Nginx, nous allons utiliser la commande:
dnf install nginx -y
Une fois l’installation terminée, nous pouvons démarrer nginx et le faire pour automatiquement au démarrage de la machine avec les commandes:
systemctl enable --now nginx
systemctl start nginx
Nous n’avons toujours pas accès à la page web par défaut de Nginx car le firewall nous bloque
Configuration du firewall de Rocky Linux
Pour ouvrir les ports web sur le firewall, nous devons utiliser les commandes:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Nous avons désormais accès à la page nginx par défaut en utilisant l’IP de la machine.
Nous allons ensuite ajouter notre page web dans le répertoire var/www/html
On créé un fichier index.html avec la commande:
touch index.html
On ajoute notre code dans le fichier puis nous allons dans le répertoire /etc/nginx/conf.d et nous créons un fichier site1.conf, toujours avec la commande:
touch site1.conf
Puis on ajoute le contenu approprié à son installation
server {
listen 80;
server_name nomdedomaine.fr www.nomdedomaine.fr ipduserveurweb;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/nomdufichier.access.log;
error_log /var/log/nginx/nomdufichier.error.log warn;
}
On redémarre nginx avec la commande:
systemctl restart nginx
On a désormais accès au site web !
J’ai spécifié le nom du serveur utilisé dans la page web pour que l’on sache quel serveur est utilisé, cela sera utile plus tard dans le tuto.
On fait la même chose sur une 2e machine pour avoir 2 serveur web
Utiliser un nom de domaine factice
Vous pouvez également utiliser un nom de domaine factice en modifiant votre fichier hosts, pour y accéder, utilisez le chemin C:\Windows\System32\drivers\etc puis ajoutez ceci en bas du fichier:
IP de la machine | Nom de domaine utilisé |
---|---|
ip serveur 1 | nom de domaine |
ip serveur 2 | nom de domaine |
Exemple:
Vous aurez accès au site via l’url
Mise en place du protocole HTTPS
Pour sécuriser la communication entre notre serveur et nos clients, il est impératif de mettre en place du HTTPS qui permettra de chiffrer la communication.
SSécurisation d’un service WEB
On va commencer par créer un répertoire avec la commande:
mkdir /etc/ssl/private
On va limiter l’accès avec la commande:
chmod 700 /etc/ssl/private
Puis nous allons générer un certificat avec la commande:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Cette commande génère un certificat SSL auto-signé et une clé privée pour sécuriser un serveur Nginx avec HTTPS. Elle crée une clé RSA de 2048 bits et un certificat valable un an, stockés respectivement dans /etc/ssl/private/nginx-selfsigned.key et /etc/ssl/certs/nginx-selfsigned.crt. Ce certificat n’est pas validé par une autorité de certification, mais il permet de chiffrer les connexions.
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Intégration du HTTPS dans le fichier de configuration
On accède au fichier de configuration nginx de notre site avec la commande:
nano /etc/nginx/conf.d/nomdusite.conf
et on ajoute cette configuration
server {
listen 80;
server_name nomdedomaine.fr www.nomdedomaine.fr ipduserveurweb;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/nomdufichier.access.log;
error_log /var/log/nginx/nomdufichier.error.log warn;
}
server {
listen 443 ssl;
server_name nomdedomaine.fr www.nomdedomaine.fr ipduserveurweb;
root /var/www/html;
index index.html;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/nomdufichier.ssl.access.log;
error_log /var/log/nginx/nomdufichier.ssl.error.log warn;
}
On test ensuite le fichier de configuration avec la commande:
nginx -t
On un retour type:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Puis on redémarre nginx avec la commande:
systemctl restart nginx
Vu que l’on a déjà ouvert le port 443 en même temps que le port 80, si on essaye d’accéder au site via https, on arrive vien sur le site
redirection auto du HTTP vers le HTTPS
Pour que le HTTP redirige vers le HTTPS, on peux soit:
- laisser le listen 80 et serveur_name, supprimer tout le reste de la partie HTTP pour mettre la ligne:
return 301 https://$host$request_uri;
- Simplement ajouter la commande dans la partie http sans rien supprimer
return 301 https://$host$request_uri;
On enregistre et quitte, puis on redémarre nginx pour que les modifications soient prises en compte.
Mise en place de la haute disponibilité (HA Proxy)
Nous avons nos 2 machines web:
- Serveur Web 1
- Serveur Web 2
Mise en place d’un serveur HA
Nous allons utiliser une 3e VM Rocky Linux
Sur notre machine HA, on installe haproxy avec la commande:
dnf install haproxy -y
On fait un backup de notre fichier de configuration avec la commande:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
Nous pouvons désormais modifier le fichier avec la commande:
nano /etc/haproxy/haproxy.cfg
Et on ajouter les lignes suivantes en haut du fichier
listen stats
bind *:8080
mode http
stats enable
stats hide-version
stats uri / stats
stats admin if TRUE
stats auth haproxy:haproxy
Puis on met les nom de machine et leur IP
Puis on active rsyslog en décommentant les lignes avec la commande:
nano /etc/rsyslog.conf
On donne ensuite une politique à SElinux avec la commande:
setsebool -P haproxy_connect_any 1
On ouvre le port 8080 pour haproxy avec les commandes:
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
Et on démarre haproxy et rsyslog avec les commandes:
systemctl start haproxy
systemctl start rsyslog
On peux désormais se connecter à l’interface d’administration de haproxy avec l’ip de la machine ha et le port 8080
Identifiant | Mot de passe |
---|---|
haproxy | haproxy |
On est désormais connecté à l’interface de haproxy
Sécurisation de HA Proxy
On va mettre en place un certificat auto-signé pour HAproxy
Pour cela on se rend dans le dossier comportant nos certificats
cd /etc/pki/tls/certs
Et on génère notre certificat
openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/pki/tls/certs/haproxy.pem -out /etc/pki/tls/certs/haproxy.pem -days 365
Mise en place d’un 2e HA Proxy
Installation d’un deuxième HA Proxy
Schémas