1.2 Infrastrucure Web - gpk659/WoodyToys-Projet-VPS GitHub Wiki
Introduction
Le serveur nginx gère 3 sites internet :
- Un site qui présente l'entreprise.
- Un site b2b pour la consultation et la vente des produits.
- Un intranet qui est accessible que par les employés de l'entreprise.
Installation du serveur web
Nous avons décidé de travailler avec NGINX pour le web.
On lance notre image docker avec cette commande ci-dessous. On ajoute comme paramètre le port 80 et 443 pour le web. On crée un volume pour avoir un lien entre l'image docker et notre dossier personnel :
docker run --name nginx -p 80:80 -p 443:443 -v /home/gregEphec/siteWeb:/usr/share/nginx/html:rw -d nginx
Ensuite on entre dans l'image docker avec la commande suivante :
docker exec -ti nginx bash
On édite le fichier default.conf qui se trouve dans le dossier /etc/nginx/conf On y ajoute ce qu'il nous faut pour nos 3 sites. Voici un exemple :
server {
listen 80;
root /usr/share/nginx/html/www;
index index.html index.htm;
server_name www.wt5.ephec-ti.be;
location / {
try_files $uri $uri/ =404;
}
}
Nous avons choisi de créer notre propre page d'erreur 404 :
error_page 404 /custom_404.html;
location = /custom_404.html {
root usr/share/nginx/html;
internal;
}
Ainsi qu'une redirection quand nous essayons d’accéder au site via son adresse ip :
server_name localhost;
rewrite ^ http://www.wt5.ephec-ti.be? permanent;
Si il y a eu des modifications il ne faut pas oublier des les appliquer.
- Pour tester la configuration
sudo nginx -t
- Pour recharger la configuration
/etc/init.d/nginx reload
Mise en place du protocole HTTPS pour sécuriser nos pages :
- Nous avons utilisé Letsencrypt pour utiliser des certificats gratuits
-
Installation de letsencrypt pour obtenir des certificats :
sudo apt-get install letsencrypt
-
Monter un volume qui contiendra les certificats pour nginx :
-v /etc/letsencrypt:/etc/letsencrypt
-
Stopper le container nginx :
docker stop moncontainernginx
-
Récupérer les certificats avec le serveur dédié de letsencrypt :
sudo letsencrypt certonly --standalone --email [email protected] -d www.wt5.ephec-ti.be -d b2b.wt5.ephec-ti.be -d intranet.wt5.ephec-ti.be
-
Compléter la config nginx
Reverse Proxy
Grâce au reverse-proxy, le serveur web est protégé des attaques directes de l'extérieur, ce qui renforce la sécurité du réseau interne. D'autre part, la fonction de cache du reverse-proxy peut permettre de soulager la charge du serveur pour lequel il est prévu, c'est la raison pour laquelle un tel serveur est parfois appelé « accélérateur »(server accelerator).
Configuration Reverse Proxy
On va ensuite pouvoir ajouter des "options" pour l’utiliser en mode reverse proxy. Il suffira de modifier le template suivant en remplaçant les champs en entre **.
##
# *NOM DU SITE OU SERVICE*
##
server {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
listen *PORT D'ECOUTE DU SERVEUR*;
server_name *ADRESSE SITE WEB*;
location / {
proxy_pass http://*IP SERVEUR WEB*:*PORT SERVEUR WEB*;
allow *IP AUTORISÉE*;
deny all;
}
}
- Access_log et error_log définissent le fichier de log pour les accès et les erreurs d'Nginx.
- proxy_set_header permet de modifier les entêtes.
- Listen est le port d'écoute. Server_name définit le nom de domaine du serveur arrière.
- Location définit l'adresse spécifiée et le port spécifié du serveur sur lequel se trouve le serveur web.
- On peut également définir les adresses Ip qui ont accès ou non au serveur web grâce aux règles allow et deny.
Utilisation de htpasswd
Pour assurer une confidentialité totale, rien n'est transmis à aucun serveur, tout reste dans le navigateur.
Pour configurer un user avec un mot de passe, il faut utiliser cette commande :
sudo htpasswd /chemin_du_dossier/.htpasswd nom_user
- Placez votre fichier de mots de passe dans un répertoire inaccessible depuis le web sinon vos utilisateurs pourraient le télécharger.
Ensuite il faut adapter la configuration de nginx en conséquence comme ceci :
location / {
auth_basic "L'accès à ce répertoire est sécurisé";
auth_basic_user_file /chemin/vers/htpasswd;
}