« Reverse Proxy NGINX » : différence entre les versions
De EC_Wiki
Autres actions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 34 : | Ligne 34 : | ||
proxy_pass http://127.0.0.1:3000; | proxy_pass http://127.0.0.1:3000; | ||
== 3. Modèle NGINX pour un service en subpath == | === 3. Modèle NGINX pour un service en subpath === | ||
À copier/coller pour n’importe quel service : | À copier/coller pour n’importe quel service : | ||
Dernière version du 23 décembre 2025 à 15:44
🧩 Reverse Proxy NGINX — Services en Subpath (Checklist complète) modifier le wikicode
1. Règles générales (à toujours appliquer) modifier le wikicode
- 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) modifier le wikicode
✔️ Si le service tourne à la racine (/) modifier le wikicode
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 modifier le wikicode
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 modifier le wikicode
À 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 modifier le wikicode
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 : modifier le wikicode
python: app = Flask(__name__, static_url_path='/homepharma/static')
Vérification locale : modifier le wikicode
bash: curl -I http://127.0.0.1:5000
Vérification reverse proxy : modifier le wikicode
bash: curl -I https://IP/homepharma/ --insecure
5. Service systemd pour une app Python (modèle propre) modifier le wikicode
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 modifier le wikicode
- ❌ 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