Nginx en reverse proxy
Plutôt que d'ouvrir le port 3000 ou 8080 sur Internet, faites écouter Nginx sur 80/443 et transférez le trafic vers votre application locale. Pattern standard sur un VPS Linux HolyCloud hébergeant API, panel ou conteneurs Docker.
Prérequis
- Nginx installé (
apt install nginx) - Application qui écoute en local (ex.
127.0.0.1:3000) - Nom de domaine et certificat TLS (voir « Nginx et Certbot ») recommandés
- UFW : seulement 80/443 publics
Étape 1 : application backend d'exemple
# Exemple : conteneur sur le port 3000
docker run -d --name app -p 127.0.0.1:3000:3000 votre-image:tag
curl -sI http://127.0.0.1:3000
L'application doit être joignable uniquement en localhost si possible.
Étape 2 : configuration reverse proxy
sudo nano /etc/nginx/sites-available/app.example.com
upstream app_backend {
server 127.0.0.1:3000;
keepalive 32;
}
server {
listen 80;
listen [::]:80;
server_name app.example.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name app.example.com;
# Chemins Certbot — adaptez si nécessaire
ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
location / {
proxy_pass http://app_backend;
proxy_http_version 1.1;
proxy_set_header Host $host;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 90s;
}
}
Activez le site :
sudo ln -sf /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Étape 3 : plusieurs services (chemins)
location /api/ {
proxy_pass http://127.0.0.1:4000/;
}
location / {
proxy_pass http://127.0.0.1:3000/;
}
Attention au slash final de proxy_pass pour préserver ou retirer le préfixe /api.
Étape 4 : limites et logs
sudo nano /etc/nginx/nginx.conf
Dans le bloc http, ajustez si besoin :
client_max_body_size 50M;
Logs par site : access_log /var/log/nginx/app.example.com.access.log;
Vérification
curl -sI https://app.example.com
curl -s https://app.example.com/health
sudo tail -f /var/log/nginx/error.log
Depuis l'extérieur, le port 3000 ne doit pas être accessible :
sudo ufw status | grep 3000
Besoin d'aide HolyCloud
- 502 Bad Gateway : backend arrêté ou mauvais port —
curl http://127.0.0.1:3000,docker ps - WebSocket coupé : vérifiez les en-têtes
Upgrade/Connection - Support :
nginx -t, extrait du vhost (sans clé privée) et statut du conteneur/service