You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Result**: The server can push config changes (repos and plans) to connected clients
127
127
128
+
## Reverse Proxy
129
+
130
+
When exposing a Backrest server to remote clients, you only need to expose the sync RPC path. All other Backrest endpoints (UI, admin API, metrics, downloads) should remain on your trusted network.
131
+
132
+
**Path to expose**: `/v1sync.BackrestSyncService/`
133
+
134
+
This is the single bidirectional gRPC/Connect stream peers use to sync. The protocol runs its own post-quantum-safe encrypted transport on top of the connection, but you should still terminate TLS at the proxy.
135
+
136
+
Requirements:
137
+
138
+
-**HTTP/2 end-to-end** (or h2c to the upstream) — the sync stream is a long-lived bidi stream and will not work over HTTP/1.1.
139
+
-**No response buffering** on the proxy.
140
+
-**Long timeouts** (hours, not seconds) — the stream is intentionally persistent.
141
+
-**No request/response size limits** on the sync path.
142
+
143
+
### Caddy
144
+
145
+
```Caddyfile
146
+
backrest.example.com {
147
+
@sync path /v1sync.BackrestSyncService/*
148
+
reverse_proxy @sync h2c://127.0.0.1:9898 {
149
+
flush_interval -1
150
+
transport http {
151
+
read_timeout 24h
152
+
write_timeout 24h
153
+
}
154
+
}
155
+
}
156
+
```
157
+
158
+
Replace `127.0.0.1:9898` with your Backrest instance's bind address. Any path other than `/v1sync.BackrestSyncService/*` will return 404, keeping the UI and admin API off the public internet.
159
+
160
+
If you also want to expose the UI publicly (not recommended without additional auth in front), add a second `reverse_proxy` block without the path matcher — but be aware this also exposes the admin API.
161
+
128
162
## Troubleshooting
129
163
130
-
**Client can't connect**: Verify the Instance URL is reachable from the client. The URL should include the port (default 9898). If using a reverse proxy, ensure it supports HTTP/2 (needed for the bidirectional sync stream) and is configured to allow long polling requests (e.g. 10+ minutes). Disable any proxy timeouts or payload size limits that could interfere with the sync connection. Recommend using a modern reverse proxy like Caddy.
164
+
**Client can't connect**: Verify the Instance URL is reachable from the client. The URL should include the port (default 9898). If using a reverse proxy, ensure it supports HTTP/2 (needed for the bidirectional sync stream) and is configured to allow long polling requests (e.g. 10+ minutes). Disable any proxy timeouts or payload size limits that could interfere with the sync connection. Recommend using a modern reverse proxy like Caddy. See the [Reverse Proxy](#reverse-proxy) section above for a working Caddy config.
131
165
132
166
**Pairing fails**: Check that the pairing token hasn't expired and hasn't exceeded its max uses. Generate a new token if needed.
0 commit comments