Retourner sur le site

Nginx en reverse proxy

Exposez une application backend (Node, Docker, etc.) derrière Nginx sur votre VPS HolyCloud avec en-têtes proxy et WebSocket.

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