Files
billisdead 00b2c5db85 docs: simplify HAPROXY.md for existing setup
Config ciblée sur le backend n8n existant — juste le delta à appliquer.
Token requis uniquement hors LAN/IP fixe, LAN reste en accès direct.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 18:33:06 +02:00

97 lines
2.6 KiB
Markdown

# Configuration HAProxy pour n8n Pilot
## Contexte
n8n est déjà exposé via HAProxy à `https://n8n.gyozamancave.fr`.
Il suffit d'ajouter la validation du `X-App-Token` dans le backend existant **sans toucher au frontend**.
---
## Modification à apporter — backend n8n uniquement
Remplacer le backend `n8n-backend` actuel par :
```haproxy
backend n8n-backend
mode http
balance source
# IPs qui ne nécessitent pas le X-App-Token (LAN + IP fixe perso)
acl is_local src 192.168.1.0/24 192.168.2.0/24 82.67.3.126/32
# Validation du token pour les accès extérieurs (mobile app)
acl valid_app_token req.hdr(X-App-Token) -m str "VOTRE_TOKEN_ICI"
http-request deny deny_status 403 if !is_local !valid_app_token
# Supprimer le token avant de forwarder à n8n (n8n ne doit pas le voir)
http-request del-header X-App-Token
http-request set-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Real-IP %[src]
http-request set-header X-Forwarded-For %[src]
http-request set-header Host %[req.hdr(host)]
option forwardfor
server n8n 192.168.1.56:5678
```
**Logique** :
- Depuis le LAN (`192.168.1/2.x`) ou ton IP fixe → accès direct, pas de token requis (navigation normale dans n8n)
- Depuis l'extérieur (mobile app 4G/5G) → `X-App-Token` obligatoire, sinon 403
---
## Appliquer la modification
```bash
# Valider la syntaxe avant rechargement
haproxy -f /etc/haproxy/haproxy.cfg -c
# Rechargement gracieux (sans coupure)
systemctl reload haproxy
```
---
## Générer un token solide
```bash
openssl rand -hex 32
```
Copier la valeur générée dans :
1. La config HAProxy (`VOTRE_TOKEN_ICI` ci-dessus)
2. L'app Android : Paramètres > Token HAProxy > Sauvegarder
---
## Rotation du token
1. Générer un nouveau token (`openssl rand -hex 32`)
2. Ajouter temporairement les **deux** ACLs dans HAProxy pour éviter les coupures :
```haproxy
acl valid_app_token req.hdr(X-App-Token) -m str "ANCIEN_TOKEN"
acl valid_app_token_new req.hdr(X-App-Token) -m str "NOUVEAU_TOKEN"
http-request deny deny_status 403 if !is_local !valid_app_token !valid_app_token_new
```
3. Mettre à jour le token dans l'app (Paramètres > Token HAProxy)
4. Retirer l'ancien token de la config HAProxy
5. `systemctl reload haproxy`
---
## Troubleshooting
**403 depuis l'app** → token absent ou incorrect. Tester :
```bash
curl -v -H "X-App-Token: VOTRE_TOKEN" https://n8n.gyozamancave.fr/api/v1/workflows
```
**403 depuis le navigateur** → vérifier que l'IP source est bien dans `is_local`. Depuis un VPN ou tethering, l'IP peut ne pas matcher.
**Logs HAProxy en direct** :
```bash
journalctl -u haproxy -f
```