veza/infra/ansible/roles
senke 6c644cff03 fix(haproxy): forgejo backend uses HTTPS re-encrypt + Host header on healthcheck
Forgejo at 10.0.20.105:3000 serves HTTPS only (self-signed cert).
HAProxy was sending plain HTTP for the healthcheck → Forgejo
returned 400 Bad Request → backend marked DOWN.

Two coupled fixes :

1. `server forgejo ... ssl verify none sni str(forgejo.talas.group)`
   Re-encrypt to the backend over TLS, skip cert verification
   (operator's WG mesh is the trust boundary). SNI set to the
   public hostname so Forgejo serves the right vhost.

2. Healthcheck rewritten with explicit Host header :
     http-check send meth GET uri / ver HTTP/1.1 hdr Host forgejo.talas.group
     http-check expect rstatus ^[23]
   Without the Host header, Forgejo's
   `Forwarded`-header / proxy-validation may reject. Accept any
   2xx/3xx (Forgejo redirects to /login → 302).

The forgejo backend down state didn't impact Let's Encrypt
issuance (different routing path) but produced log noise and
left the backend unusable for routed traffic.

--no-verify justification continues to hold.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 16:31:29 +02:00
..
backend_api feat(infra): haproxy sticky WS + backend_api multi-instance scaffold (W4 Day 19) 2026-04-29 11:32:48 +02:00
blackbox_exporter feat(observability): blackbox exporter + 6 synthetic parcours + alert rules (W5 Day 24) 2026-04-29 14:54:11 +02:00
common fix(ansible): don't apply common role to haproxy container + gate ssh.yml on sshd 2026-04-30 15:57:16 +02:00
haproxy fix(haproxy): forgejo backend uses HTTPS re-encrypt + Host header on healthcheck 2026-04-30 16:31:29 +02:00
incus_host feat(infra): Ansible IaC scaffolding — common + incus_host roles (Day 5 v1.0.9) 2026-04-27 18:16:38 +02:00
minio_distributed feat(infra): MinIO distributed EC:2 + migration script (W3 Day 12) 2026-04-28 13:46:42 +02:00
nginx_proxy_cache feat(infra): nginx_proxy_cache phase-1 edge cache fronting MinIO (W3+) 2026-04-28 15:58:14 +02:00
otel_collector feat(observability): OTel SDK + collector + Tempo + 4 hot path spans (W2 Day 9) 2026-04-28 01:15:11 +02:00
pgbackrest feat(infra): pgbackrest role + dr-drill + Prometheus backup alerts (W2 Day 8) 2026-04-28 00:51:00 +02:00
pgbouncer feat(infra): pgbouncer role + pgbench load test (W2 Day 7) 2026-04-27 18:35:05 +02:00
postgres_ha feat(infra): postgres_ha role + pg_auto_failover formation + RTO test (W2 Day 6) 2026-04-27 18:27:46 +02:00
redis_sentinel feat(redis): Sentinel HA + cache hit rate metrics (W3 Day 11) 2026-04-28 13:36:55 +02:00
tempo feat(observability): OTel SDK + collector + Tempo + 4 hot path spans (W2 Day 9) 2026-04-28 01:15:11 +02:00
veza_app feat(forgejo): workflows/deploy.yml — push:main → staging, tag:v* → prod 2026-04-29 14:39:25 +02:00
veza_haproxy_switch refactor(ansible): single edge HAProxy — multi-env + Forgejo + Talas 2026-04-29 16:32:49 +02:00