Clarify forwarded protocol precedence in Gitea registry diagnostics
All checks were successful
check / verify (push) Successful in 3m1s
check / publish (push) Has been skipped

This commit is contained in:
Weapie 2026-10-08 09:00:49 +02:00
parent 7be231409f
commit 6fd5e21008
2 changed files with 13 additions and 1 deletions

View File

@ -43,6 +43,16 @@ Bei einer geänderten Compose-Umgebungsvariable reicht `docker restart` nicht: d
Neue Release-Workflows prüfen den HTTPS-Realm bereits vor Login und Image-Build mit `node scripts/check-registry.mjs`. Ein erneuter Lauf des alten Tags `v1.0.0` verwendet weiterhin den Workflow dieses Tags; die Serverkorrektur ist auch dafür erforderlich. Neue Release-Workflows prüfen den HTTPS-Realm bereits vor Login und Image-Build mit `node scripts/check-registry.mjs`. Ein erneuter Lauf des alten Tags `v1.0.0` verwendet weiterhin den Workflow dieses Tags; die Serverkorrektur ist auch dafür erforderlich.
**Gitea 1.22.3: Proxy-Header haben Vorrang.** Der Registry-Code verwendet `GuessCurrentHostURL`; ein vom Proxy angeliefertes `X-Forwarded-Proto: http` übersteuert eine korrekt gesetzte HTTPS-`ROOT_URL`. Danach berücksichtigt Gitea auch `X-Forwarded-Protocol`, `X-Url-Scheme`, `Front-End-Https` und `X-Forwarded-Ssl`. Siehe [Registry-Code](https://github.com/go-gitea/gitea/blob/v1.22.3/routers/api/packages/container/container.go) und [URL-Ermittlung](https://github.com/go-gitea/gitea/blob/v1.22.3/modules/httplib/url.go).
Wenn Umgebungsvariable und `app.ini` bereits HTTPS enthalten, nicht wiederholt ROOT_URL ändern. Im Gitea-Container ohne Proxy prüfen:
```sh
wget -S -O /dev/null http://127.0.0.1:3000/v2/ 2>&1
```
HTTP 401 ist dabei erwartbar. Liefert der direkte Aufruf einen HTTPS-Realm, der öffentliche Aufruf aber HTTP, liegt der Unterschied in der Proxy-Kette. Der vertrauenswürdige Proxy muss für externe HTTPS-Aufrufe das ursprüngliche Protokoll korrekt an Gitea weiterreichen. Bei Cloudflare auch SSL/TLS-Modus und die Verbindung zum Origin prüfen; `Full (strict)` benötigt ein gültiges Origin-Zertifikat. Keine ungeprüften Client-Header pauschal vertrauen. Die konkrete Korrektur hängt von Nginx, Traefik, Caddy bzw. Cloudflare Tunnel ab.
```bash ```bash
curl -sS -D - -o /dev/null https://git.jfritzsche.de/v2/ curl -sS -D - -o /dev/null https://git.jfritzsche.de/v2/
``` ```

View File

@ -13,7 +13,9 @@ if (realm !== "https://git.jfritzsche.de/v2/token") {
`Registry advertises an unexpected authentication realm: ${realm ?? "missing"}. ` + `Registry advertises an unexpected authentication realm: ${realm ?? "missing"}. ` +
"Set Gitea [server] ROOT_URL=https://git.jfritzsche.de/ " + "Set Gitea [server] ROOT_URL=https://git.jfritzsche.de/ " +
"(Docker: GITEA__server__ROOT_URL), recreate the Gitea container when changing its environment, " + "(Docker: GITEA__server__ROOT_URL), recreate the Gitea container when changing its environment, " +
"and verify the live /v2/ challenge. No credentials were sent by this check.", "and check the proxy: in Gitea 1.22.3 forwarded scheme headers override ROOT_URL. " +
"The trusted proxy must pass X-Forwarded-Proto=https for the public HTTPS request. " +
"Verify the live /v2/ challenge. No credentials were sent by this check.",
); );
} }
console.log("Registry HTTPS authentication endpoint verified."); console.log("Registry HTTPS authentication endpoint verified.");