Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

« Reverse Proxy NGINX » : différence entre les versions

De EC_Wiki
Page créée avec « == 🧩 Reverse Proxy NGINX — Services en Subpath (Checklist complète) == === 1. Règles générales (à toujours appliquer) === * Toujours utiliser un bloc de redirection pour forcer le / final : nginx ^ location = /app { return 301 /app/; } * Toujours utiliser un bloc ^~ /app/ pour éviter les conflits : nginx: location ^~ /app/ { * Toujours décider si le proxy_pass doit avoir un / final : ° Avec / final → remappe /app/... → /... ° San... »
 
Aucun résumé des modifications
Ligne 21 : Ligne 21 :
   
   
Exemples : Portainer, HomePharma, phpMyAdmin, Prometheus, Streamlit
Exemples : Portainer, HomePharma, phpMyAdmin, Prometheus, Streamlit
→ Mettre un slash final
→ Mettre un slash final
  nginx:
  nginx:
Ligne 28 : Ligne 29 :


Exemples : Grafana (root_url = /grafana), Nextcloud (/nextcloud)
Exemples : Grafana (root_url = /grafana), Nextcloud (/nextcloud)
→ Pas de slash final
→ Pas de slash final
  nginx:  
  nginx:  

Version du 23 décembre 2025 à 15:39

🧩 Reverse Proxy NGINX — Services en Subpath (Checklist complète)

1. Règles générales (à toujours appliquer)

  • Toujours utiliser un bloc de redirection pour forcer le / final :
nginx ^

 location = /app {
   return 301 /app/;
 }
  • Toujours utiliser un bloc ^~ /app/ pour éviter les conflits :
nginx:
location ^~ /app/ {
  • Toujours décider si le proxy_pass doit avoir un / final :

° Avec / final → remappe /app/... → /... ° Sans / final → garde le chemin complet /app/...

2. Règle du slash dans proxy_pass (le piège classique)

✔️ Si le service tourne à la racine (/)

Exemples : Portainer, HomePharma, phpMyAdmin, Prometheus, Streamlit

→ Mettre un slash final

nginx:
proxy_pass http://127.0.0.1:5000/;

✔️ Si le service tourne en subpath natif

Exemples : Grafana (root_url = /grafana), Nextcloud (/nextcloud)

→ Pas de slash final

nginx: 
proxy_pass http://127.0.0.1:3000;

3. Modèle NGINX pour un service en subpath

À copier/coller pour n’importe quel service :

location = /APP {
   return 301 /APP/;
}

location ^~ /APP/ {
   proxy_pass http://127.0.0.1:PORT/;
   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_redirect off;
   proxy_cookie_path / "/APP/";

   proxy_read_timeout 900s;
   proxy_send_timeout 900s;
}

Remplacer APP et PORT.

4. Flask derrière NGINX en subpath

Flask ne gère pas nativement les subpaths. Il faut lui dire explicitement qu’il tourne sous /homepharma. Dans app.py, juste après app = Flask(...) :

python:
app.config['APPLICATION_ROOT'] = '/homepharma'

Si l’app utilise des fichiers statiques :

python:
app = Flask(__name__, static_url_path='/homepharma/static')

Vérification locale :

bash:
curl -I http://127.0.0.1:5000

Vérification reverse proxy :

bash:
curl -I https://IP/homepharma/ --insecure

5. Service systemd pour une app Python (modèle propre)

ini:
[Unit]
Description=Nom de l'application Flask
After=network.target

[Service]
User=eugene
WorkingDirectory=/var/www/APP
ExecStart=/var/www/APP/venv/bin/python /var/www/APP/app.py
Restart=always
RestartSec=3
Environment="PATH=/var/www/APP/venv/bin"
Environment="FLASK_ENV=production"

[Install]
WantedBy=multi-user.target

6. Pièges à éviter absolument

  • ❌ Ne jamais laisser traîner des .save, .bak, .old dans sites-enabled
  • ❌ Ne jamais oublier le / final dans proxy_pass pour les apps à la racine
  • ❌ Ne jamais utiliser location /app (match trop large)
  • ❌ Ne jamais oublier la redirection /app → /app/
  • ❌ Ne jamais oublier d’adapter Flask pour les subpaths