Files
n8n-mobile/docs/HAPROXY.md
T
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

2.6 KiB

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 :

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

# 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

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 :
    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
  1. Mettre à jour le token dans l'app (Paramètres > Token HAProxy)
  2. Retirer l'ancien token de la config HAProxy
  3. systemctl reload haproxy

Troubleshooting

403 depuis l'app → token absent ou incorrect. Tester :

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 :

journalctl -u haproxy -f