mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-09-02 00:11:56 +03:00
Pass real client IPs through with PROXY protocol v2
Without this, mtg and Caddy see HAProxy's container IP for every connection, which breaks meaningful logging, abuse handling, and any IP-based blocklist logic. HAProxy sends a PROXY protocol v2 header on its TCP backends; mtg enables proxy-protocol-listener, and Caddy wraps :8443 with a proxy_protocol listener before tls. The :80 path (ACME HTTP-01 passthrough) is unchanged — client IP there is not useful and HAProxy's http mode already adds X-Forwarded-For if anyone wants it. Requested in https://github.com/9seconds/mtg/pull/462 review.
This commit is contained in:
@@ -43,6 +43,19 @@ docker compose up -d
|
||||
docker compose exec mtg mtg access /config/config.toml
|
||||
```
|
||||
|
||||
## Real client IPs (PROXY protocol)
|
||||
|
||||
HAProxy forwards TCP connections to mtg and Caddy with a PROXY protocol
|
||||
v2 header so both backends see the real client IP instead of HAProxy's
|
||||
container address. The three pieces must stay in sync:
|
||||
|
||||
- `haproxy.cfg` — `send-proxy-v2` on the `mtg` and `web` backend `server` lines
|
||||
- `mtg-config.toml` — `proxy-protocol-listener = true`
|
||||
- `Caddyfile` — `listener_wrappers { proxy_protocol { ... } tls }` on `:8443`
|
||||
|
||||
If you disable one, disable all three, otherwise the backend will fail
|
||||
to parse the connection.
|
||||
|
||||
## ACME (Let's Encrypt) notes
|
||||
|
||||
HAProxy passes `/.well-known/acme-challenge/` requests on `:80` to
|
||||
|
||||
Reference in New Issue
Block a user