Vault-Sync: LFS-Upload scheitert hinter Reverse Proxy (doppelter Authorization-Header) #128

Closed
opened 2026-10-29 08:29:23 +00:00 by alf · 1 comment
Owner

Befund

Der Vault-Abgleich lädt Anhänge (Git-LFS) hinter dem Reverse Proxy (nginx/openresty) nicht hoch. Beim Verbinden mit einem neuen Repo bricht der Push mit

LFS: Client error: https://…/info/lfs/objects/<oid>/<größe>
error: failed to push some refs to '…'

ab. Betroffen sind Objekte jeder Größe (22 KB bis 60 MB); ship/Abgleich zeigen nur diesen Text, Forgejo selbst protokolliert keinen Fehler.

Ursache (gemessen)

Der Zugang wird per http.<server>.extraHeader = Authorization: Basic … an git gegeben. git-lfs hängt diesen Header an jede Anfrage an, beim Upload (PUT) zusätzlich den Authorization-Header aus der batch-Antwort von Forgejo. Der Upload trägt dann zwei Authorization:-Zeilen (Trace mit GIT_CURL_VERBOSE=1). Der Reverse Proxy weist das mit 400 ab, bevor Forgejo die Anfrage sieht (Proxy-Log: PUT … 400, kein Ziel; Forgejo-Log: kein PUT).

Nachgestellt mit dem echten git-lfs gegen dasselbe Repo:

  • mit extraHeader (wie die App): 24 von 24 Uploads → 400
  • ohne extraHeader (Zugang über Credential-Helper bzw. URL): 16 parallele Uploads, 413 MB, 39 MB/s, alle 200

Die 544 KB/s in der App sind sehr wahrscheinlich Wiederholungen der fehlgeschlagenen Uploads (nicht eigens gemessen).

Fix

Zugang nicht mehr als extraHeader, sondern als Credential-Helper für genau diesen Server (Token nur in der Umgebung des git-Prozesses, nie in .git/config, nie in der Prozessliste). Die batch-Antwort liefert dann den einzigen Authorization-Header des Uploads.

Prüfen

  • Test: Beim LFS-Upload kommt genau ein Authorization-Header an.
  • Test: Token steht nicht in .git/config.
  • Handtest gegen den Reverse Proxy (große Anhänge, parallel).

Gegenstück in der Mac-App: iris/Iris#243 (gleicher Fehler, gleiche Ursache). Hier betrifft es _basic_auth_env in app/vault_git_sync.py.

## Befund Der Vault-Abgleich lädt Anhänge (Git-LFS) hinter dem Reverse Proxy (nginx/openresty) nicht hoch. Beim Verbinden mit einem neuen Repo bricht der Push mit ``` LFS: Client error: https://…/info/lfs/objects/<oid>/<größe> error: failed to push some refs to '…' ``` ab. Betroffen sind Objekte jeder Größe (22 KB bis 60 MB); `ship`/Abgleich zeigen nur diesen Text, Forgejo selbst protokolliert keinen Fehler. ## Ursache (gemessen) Der Zugang wird per `http.<server>.extraHeader = Authorization: Basic …` an git gegeben. git-lfs hängt diesen Header an **jede** Anfrage an, beim Upload (`PUT`) zusätzlich den `Authorization`-Header aus der `batch`-Antwort von Forgejo. Der Upload trägt dann zwei `Authorization:`-Zeilen (Trace mit `GIT_CURL_VERBOSE=1`). Der Reverse Proxy weist das mit **400** ab, bevor Forgejo die Anfrage sieht (Proxy-Log: `PUT … 400`, kein Ziel; Forgejo-Log: kein PUT). Nachgestellt mit dem echten git-lfs gegen dasselbe Repo: - mit `extraHeader` (wie die App): 24 von 24 Uploads → 400 - ohne `extraHeader` (Zugang über Credential-Helper bzw. URL): 16 parallele Uploads, 413 MB, 39 MB/s, alle 200 Die 544 KB/s in der App sind sehr wahrscheinlich Wiederholungen der fehlgeschlagenen Uploads (nicht eigens gemessen). ## Fix Zugang nicht mehr als `extraHeader`, sondern als Credential-Helper für genau diesen Server (Token nur in der Umgebung des git-Prozesses, nie in `.git/config`, nie in der Prozessliste). Die `batch`-Antwort liefert dann den einzigen `Authorization`-Header des Uploads. ## Prüfen - Test: Beim LFS-Upload kommt genau ein `Authorization`-Header an. - Test: Token steht nicht in `.git/config`. - Handtest gegen den Reverse Proxy (große Anhänge, parallel). Gegenstück in der Mac-App: iris/Iris#243 (gleicher Fehler, gleiche Ursache). Hier betrifft es `_basic_auth_env` in `app/vault_git_sync.py`.
Author
Owner

PR #129 gemergt: fix(vault-sync): LFS-Upload ohne doppelten Authorization-Header (iris/iris-linux-server#128)
#129

Commits:


Stand (2026-10-29)

Befund und Ursache: wie iris/Iris#243 (doppelter Authorization-Header beim LFS-Upload über extraHeader + batch-Antwort, Reverse Proxy antwortet 400).

Geändert: _basic_auth_env in app/vault_git_sync.py gibt den Zugang als Credential-Helper für die Server-Adresse (und die freigegebene Adresse des eigenen Git-Servers), Token in IRIS_VAULT_TOKEN der git-Umgebung. Tests angepasst.

Geprüft: pytest test_vault_git_sync, test_forgejo_sharing, test_forgejo_tls, test_chat_share: 117 bestanden. Der Mechanismus selbst (Credential-Helper statt extraHeader, 24 von 24 Uploads) wurde mit dem echten git-lfs gegen den echten Proxy geprüft.

Nicht geprüft: Ein Lauf des Linux-Servers gegen einen Server hinter Reverse Proxy; nicht deployt.

Offen: Deploy auf iris-server und ein neues Image erst nach deinem Wort.

PR #129 gemergt: fix(vault-sync): LFS-Upload ohne doppelten Authorization-Header (iris/iris-linux-server#128) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/129 Commits: - fix(vault-sync): LFS-Upload ohne doppelten Authorization-Header (iris/iris-linux-server#128) --- **Stand (2026-10-29)** **Befund und Ursache:** wie iris/Iris#243 (doppelter `Authorization`-Header beim LFS-Upload über `extraHeader` + `batch`-Antwort, Reverse Proxy antwortet 400). **Geändert:** `_basic_auth_env` in `app/vault_git_sync.py` gibt den Zugang als Credential-Helper für die Server-Adresse (und die freigegebene Adresse des eigenen Git-Servers), Token in `IRIS_VAULT_TOKEN` der git-Umgebung. Tests angepasst. **Geprüft:** pytest `test_vault_git_sync`, `test_forgejo_sharing`, `test_forgejo_tls`, `test_chat_share`: 117 bestanden. Der Mechanismus selbst (Credential-Helper statt `extraHeader`, 24 von 24 Uploads) wurde mit dem echten git-lfs gegen den echten Proxy geprüft. **Nicht geprüft:** Ein Lauf des Linux-Servers gegen einen Server hinter Reverse Proxy; nicht deployt. **Offen:** Deploy auf iris-server und ein neues Image erst nach deinem Wort.
alf 2026-10-31 09:11:15 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/iris-linux-server#128
No description provided.