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.

NGINX

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;
}