Introduction
Un Reverse Proxy (ou proxy inverse) est un serveur intermédiaire placé devant vos applications web (Node.js, Python, conteneurs Docker, etc.) pour intercepter les requêtes des clients, gérer la sécurité et acheminer le trafic. En utilisant Nginx comme Reverse Proxy, vous pouvez centraliser la gestion de vos certificats SSL avec Let's Encrypt, masquer les ports internes de vos services (comme 3000 ou 8080) et booster les performances d'affichage.
1. Installer Nginx sur Debian / Ubuntu
Nginx est disponible par défaut dans les dépôts officiels de toutes les distributions Linux majeures. Installez-le et assurez-vous qu'il démarre correctement au démarrage.
sudo apt update
sudo apt install -y nginx
# Activer et démarrer le service Nginx
sudo systemctl enable --now nginx
# Vérifier le statut
sudo systemctl status nginxConseil important
Si vous disposez d'un pare-feu actif comme UFW, n'oubliez pas d'autoriser les flux web HTTP (80) et HTTPS (443) : 'sudo ufw allow 80/tcp && sudo ufw allow 443/tcp'.
2. Préparer votre application locale (Exemple)
Dans ce guide, nous supposons que vous avez une application (par exemple en Node.js) fonctionnant en arrière-plan sur le port local 3000 de votre VPS ('http://127.0.0.1:3000'). Notre but est de la rendre accessible publiquement via le sous-domaine 'app.votre-domaine.com' sans exposer ce port.
# Exemple de commande pour vérifier qu'un service local écoute bien sur le port 3000 :
sudo ss -tulnp | grep 3000Conseil important
Si vous n'avez pas encore d'application active, vous pouvez simuler son écoute à des fins de test.
3. Créer le bloc de configuration Nginx (VirtualHost)
Créez un fichier de configuration propre pour votre application dans le répertoire de Nginx destiné aux sites disponibles.
# 1. Ouvrez le fichier de configuration avec nano :
sudo nano /etc/nginx/sites-available/mon-app.conf
# 2. Collez la configuration de reverse proxy ci-dessous :
server {
listen 80;
server_name app.votre-domaine.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Conseil important
Remplacez 'app.votre-domaine.com' par votre nom de domaine réel et 'http://127.0.0.1:3000' par l'adresse ou le port d'écoute local de votre application en arrière-plan.
4. Activer le site et tester la syntaxe de Nginx
Pour activer votre bloc de configuration, créez un lien symbolique vers le dossier 'sites-enabled'. Testez toujours la syntaxe de Nginx avant de redémarrer le service.
# Créer le lien symbolique d'activation
sudo ln -s /etc/nginx/sites-available/mon-app.conf /etc/nginx/sites-enabled/
# Tester la syntaxe de la configuration Nginx
sudo nginx -t
# Si le test affiche 'syntax is ok', rechargez Nginx pour appliquer
sudo systemctl reload nginxConseil important
Si le test 'nginx -t' renvoie une erreur, relisez attentivement votre fichier mon-app.conf pour corriger les éventuelles fautes de syntaxe ou points-virgules manquants.
5. Obtenir un certificat SSL Let's Encrypt gratuit
Sécurisez immédiatement l'ensemble des échanges en installant Certbot et son plugin Nginx officiel afin d'obtenir un certificat SSL SSL/TLS gratuit Let's Encrypt avec redirection automatique vers le HTTPS.
sudo apt install -y certbot python3-certbot-nginx
# Lancer la génération automatique et l'intégration du certificat SSL dans Nginx
sudo certbot --nginx -d app.votre-domaine.comConseil important
Certbot vous demandera une adresse e-mail de contact (pour les alertes d'expiration) et vous proposera de rediriger automatiquement le trafic HTTP non sécurisé vers le HTTPS. Choisissez l'option de redirection recommandée.
6. Automatiser le renouvellement des certificats SSL
Les certificats émis par Let's Encrypt sont valides pendant 90 jours. Heureusement, le paquet Certbot configure automatiquement un script cron (tâche planifiée) pour gérer le renouvellement en toute transparence.
# Tester manuellement le processus de renouvellement automatique (Simulation dry-run) :
sudo certbot renew --dry-runConseil important
Si la simulation se déroule sans erreur, votre serveur renouvellera automatiquement le certificat sans aucune action de votre part.
En conclusion
Vous avez mis en œuvre un reverse proxy Nginx moderne, performant et hautement sécurisé à l'aide d'un certificat de chiffrement SSL de bout en bout. Vos applications web sont maintenant prêtes à accueillir les utilisateurs sous leur nom de domaine propre !