manage reverse proxy ip for Caddy.js

This commit is contained in:
2026-05-12 15:14:50 +02:00
parent 0fa9105852
commit a88cbfca5f
2 changed files with 55 additions and 0 deletions
+12
View File
@@ -292,6 +292,18 @@ class Caddy {
}
};
// Add PROXY protocol v2 support when behind a reverse proxy (nginx/haproxy)
// Set TRUSTEDPROXYIPS in .env with comma-separated IPs of your proxy(ies)
// Example: TRUSTEDPROXYIPS="192.168.1.3,10.31.251.1"
const trustedProxyIps = process.env.TRUSTEDPROXYIPS;
if (trustedProxyIps && trustedProxyIps.trim()) {
const ips = trustedProxyIps.split(',').map(ip => ip.trim()).filter(ip => ip);
if (ips.length > 0) {
caddyconf.apps.http.servers.srv0.trusted_proxies = ips;
caddyconf.apps.http.servers.srv0.listener_wrappers = [{ wrapper: "proxy_protocol" }];
}
}
// Build list of allowed origins
const allowedOriginsSet = new Set();
webapps.forEach(w => {
+43
View File
@@ -32,3 +32,46 @@ Dans `/setup` :
- ✅ Scripts d'installation → `/setup`
- ❌ Ne pas créer de nouveaux fichiers .md dans `/setup`
- ⚠️ Lors de modifications du code, mettre à jour la documentation dans `/documents`
---
## Variable d'environnement spéciales : `TRUSTEDPROXYIPS`
Utilisée quand le serveur Caddy (dans un LXC) est derrière un reverse proxy (nginx/haproxy) qui utilise **PROXY protocol v2** (`send-proxy-v2`).
### Rôle
- Indique à Caddy quelles IPs de proxies sont autorisées à envoyer du PROXY protocol
- Active le parser PROXY protocol v2 pour récupérer l'IP réelle du client
- Empêche Caddy de voir l'IP du proxy comme IP source
### Configuration dans le `.env`
```ini
# IP(s) du/des reverse proxy(s) amont (séparées par des virgules si plusieurs)
TRUSTEDPROXYIPS="192.168.1.3"
# ou pour plusieurs proxies :
TRUSTEDPROXYIPS="192.168.1.3,10.31.251.1"
```
### Conséquence dans la config Caddy générée
Quand `TRUSTEDPROXYIPS` est défini, la config Caddy contient :
```json
{
"listen": [":80"],
"trusted_proxies": ["192.168.1.3"],
"listener_wrappers": [{ "wrapper": "proxy_protocol" }]
}
```
- `trusted_proxies` → Caddy accepte le PROXY protocol uniquement depuis ces IPs
- `listener_wrappers.proxy_protocol` → active le parseur PROXY protocol v2 sur le listener
### Cas typique d'utilisation
```
Internet → Host nginx (SSL, send-proxy-v2) → LXC → Caddy (:80) → Node.js (:3000)
```
Sans `TRUSTEDPROXYIPS`, Caddy reçoit le header PROXY protocol mais ne le parse pas → IP du host perdue.
Avec `TRUSTEDPROXYIPS` → Caddy parse le header PROXY protocol → IP réelle du client conservée.