iOS Seafile Pro 4.0.2 negotiates resumable uploads via Upload-Draft-Interop-Version: 6, but Seafile-fileserver does not understand the protocol and never returns the expected interim response; the iOS client then cancels the HTTP/2 stream after ~60s and the upload (or library-create POST) appears to fail. Strip the negotiation headers so the client falls back to normal multipart upload, and bump upstream timeouts for large transfers.
206 lines
4.3 KiB
Caddyfile
206 lines
4.3 KiB
Caddyfile
# Authentik forward-auth snippet (domain-level mode).
|
|
# Usage: add "import authentik" inside any site block to gate it.
|
|
(authentik) {
|
|
route {
|
|
reverse_proxy /outpost.goauthentik.io/* http://192.168.8.180:9000
|
|
forward_auth http://192.168.8.180:9000 {
|
|
uri /outpost.goauthentik.io/auth/caddy
|
|
copy_headers X-Authentik-Username X-Authentik-Groups X-Authentik-Email X-Authentik-Name X-Authentik-Uid X-Authentik-Jwt X-Authentik-Meta-Jwks X-Authentik-Meta-Outpost X-Authentik-Meta-Provider X-Authentik-Meta-App X-Authentik-Meta-Version
|
|
trusted_proxies private_ranges
|
|
header_up X-Forwarded-Host {host}
|
|
header_up X-Forwarded-Proto {scheme}
|
|
header_up X-Forwarded-Uri {uri}
|
|
}
|
|
}
|
|
}
|
|
|
|
# The Caddyfile is an easy way to configure your Caddy web server.
|
|
#
|
|
# Unless the file starts with a global options block, the first
|
|
# uncommented line is always the address of your site.
|
|
#
|
|
# To use your own domain name (with automatic HTTPS), first make
|
|
# sure your domain's A/AAAA DNS records are properly pointed to
|
|
# this machine's public IP, then replace ":80" below with your
|
|
# domain name.
|
|
|
|
media.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.206:8096
|
|
}
|
|
|
|
git.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
handle_path /_plantuml/* {
|
|
rewrite * /plantuml{uri}
|
|
reverse_proxy 192.168.8.205:8079
|
|
}
|
|
handle {
|
|
reverse_proxy 192.168.8.121:3000
|
|
}
|
|
}
|
|
|
|
paperless.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
@api path /api/*
|
|
handle @api {
|
|
reverse_proxy 192.168.8.130:8000
|
|
}
|
|
handle {
|
|
import authentik
|
|
reverse_proxy 192.168.8.130:8000
|
|
}
|
|
}
|
|
|
|
books.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.205:6060
|
|
}
|
|
|
|
home.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.101:8123
|
|
}
|
|
|
|
cloud.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.224:80
|
|
}
|
|
|
|
matrix.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.239:8008
|
|
}
|
|
|
|
proxmox.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy https://192.168.8.77:8006 {
|
|
transport http {
|
|
tls_insecure_skip_verify
|
|
}
|
|
}
|
|
}
|
|
|
|
docker.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy https://192.168.8.205:9443 {
|
|
transport http {
|
|
tls_insecure_skip_verify
|
|
}
|
|
}
|
|
}
|
|
|
|
jellyseerr.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.132:5056
|
|
}
|
|
|
|
qbit.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
@api path /api/*
|
|
handle @api {
|
|
reverse_proxy 192.168.8.132:8080
|
|
}
|
|
handle {
|
|
import authentik
|
|
reverse_proxy 192.168.8.132:8080
|
|
}
|
|
}
|
|
|
|
sab.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.132:8081
|
|
}
|
|
|
|
blog.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.205:8080
|
|
}
|
|
|
|
photos.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.136:3000
|
|
}
|
|
|
|
auth.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
reverse_proxy 192.168.8.180:9000
|
|
}
|
|
|
|
artifacto.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
# Public paths: share URLs, static assets, health — no SSO
|
|
@public path /p/* /static/* /healthz
|
|
handle @public {
|
|
reverse_proxy 192.168.8.205:3100
|
|
}
|
|
# Admin + login surface: Authentik forward-auth + shared-secret header
|
|
# so the app can auto-login an Authentik-authenticated user.
|
|
handle {
|
|
import authentik
|
|
reverse_proxy 192.168.8.205:3100 {
|
|
header_up X-Artifacto-Gateway {env.ARTIFACTO_GATEWAY_SECRET}
|
|
}
|
|
}
|
|
}
|
|
|
|
files.hubris.network {
|
|
tls {
|
|
dns ionos {env.IONOS_AUTH_API_TOKEN}
|
|
}
|
|
encode zstd gzip
|
|
request_body {
|
|
max_size 10GB
|
|
}
|
|
reverse_proxy 192.168.8.185:80 {
|
|
header_up X-Forwarded-Proto https
|
|
header_up X-Forwarded-Host {host}
|
|
header_up Host {host}
|
|
# Seafile iOS Pro app (>=4.0) speaks the IETF Resumable Uploads draft;
|
|
# the bundled seafile-fileserver does not. Strip the negotiation headers
|
|
# so the client falls back to a normal multipart upload.
|
|
header_up -Upload-Draft-Interop-Version
|
|
header_up -Upload-Complete
|
|
header_up -Upload-Offset
|
|
header_up -Upload-Length
|
|
transport http {
|
|
dial_timeout 30s
|
|
read_timeout 1h
|
|
write_timeout 1h
|
|
}
|
|
flush_interval -1
|
|
}
|
|
}
|