Afin de mettre en place un Reverse Proxy, on utilise un serveur Nginx. ce dernier permet de rediriger le trafic http / https sur un contenaire Docker ( qu'on va appeler WEB ) en fonction du domaine ou du sous domaine demandé.
Le serveur HTTP/HTTPS Nginx a été lancé en 2002 puis reconnu pour sa légèreté et sa puissance. En effet comme Nginx découpe chaque requête en plusieurs mini-tâches, ce dernier offre une performances très élevées, mais également une consommation de mémoire particulièrement faibles comparativement aux serveurs classiques, tels qu'Apache. Ce qui nous permet de n’allouer que 1Go de RAM et un seul cœur de CPU pour le contenaire Reverse.
Ne pas confondre entre un serveur Proxy et in serveur Proxy Inverse :
Lorsque un client accède su L’URL https://samirkherraz.equantum.fr les paquets arrivent d’abord sur la carte réseau WAN ( Box internet ) puis rediriger vers la carte LAN grâce aux règles de nattage.
Ceux ci seront envoyé à l’adresse IP du contenaire Reverse puis selon le nom de domaine / sous domaine seront transmis au contenaire Web si c’est un site web ou bien sur un contenaire Nextcloud par exemple si le sous domaine correspond a celui ci.
Ces filtres se font grâce à la configuration de Nginx. Sur Nginx comme apache il est possible de faire tourner plusieurs sites sur un même serveur. Chaque sites possède un nom de domaine ou un sous domaine particulier.
Ensuite chaque service peut être configuré pour spécifier ce que Nginx doit faire lorsque une requête arrive.
Dans l’exemple qui suit, nous allons voir un exemple de configuration du Reverse Proxy
/etc/nginx/proxy_params
proxy_set_header Referer $http_referer;
proxy_set_header Host $host;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Proto https;
Cette configuration nous permet de faire en sorte que le proxy transfère les cookies, le nom de domaine le Referer ainsi que la plus part des attributs de l’entête du protocole HTTP ou HTTPS au serveur web qui s’exécute au niveau du contenaire WEB. Ainsi le Reverse proxy sera totalement transparent
/etc/nginx/sites-available/samirkherraz.equantum.fr
server {
# Configuration pour de domaine samir-kherraz.tk et le sous domaine samirkherraz.equantum.fr
# sur le port 80 ( HTTP ) ici juste une simple redirection sur du HTTPS
listen 80;
server_name samirkherraz.equantum.fr;
access_log /var/log/nginx/web-access.log;
error_log /var/log/nginx/web-error.log;
include /etc/nginx/conf.d/*.conf;
location /.well-known {
alias /var/www/samirkherraz.equantum.fr/.well-known/;
}
return 301 https://samirkherraz.equantum.fr$request_uri;
}
server {
# Configuration pour de domaine samir-kherraz.tk et le sous domaine samirkherraz.equantum.fr
# sur le port 443 ( HTTPS )
listen 443;
server_name samir-kherraz.tk samirkherraz.equantum.fr;
access_log /var/log/nginx/ssl-web-access.log;
error_log /var/log/nginx/ssl-web-error.log;
include /etc/nginx/conf.d/*.conf;
keepalive_timeout 70;
ssl on;
ssl_certificate /etc/letsencrypt/live/samirkherraz.equantum.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/samirkherraz.equantum.fr/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
add_header X-Frame-Options SAMEORIGIN;
location /.well-known {
alias /var/www/samirkherraz.equantum.fr/.well-known;
}
location / {
proxy_pass http://192.168.1.4/;
}
}
3931