Caddy wont start after updating post v2.10

1. The problem I’m having:

I’m running Caddy as an LXC on Proxmox (with the cloudflare plugin on), I have a backup version running pre v2.10 which is working perfectly, but when I attempt to upgrade either manually or do a fresh install and copy over my Caddyfile it stops working on the very same error.

2. Error messages and/or full log output:

Aug 26 11:23:46 caddy systemd[1]: Starting caddy.service - Caddy…Aug 26 11:23:46 caddy caddy[153]: {“level”:“info”,“ts”:1756218226.9793398,“msg”:“maxprocs: Leaving GOMAXPROCS=1: CPU quota undefined”}Aug 26 11:23:46 caddy caddy[153]: {“level”:“info”,“ts”:1756218226.9798703,“msg”:“GOMEMLIMIT is updated”,“package”:“github.com/KimMachineGun/automemlimit/memlimit",“GOMEMLIMIT”:30079096012,"previous”:9223372036854775807}Aug 26 11:23:46 caddy caddy[153]: caddy.HomeDir=/var/lib/caddyAug 26 11:23:46 caddy caddy[153]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddyAug 26 11:23:46 caddy caddy[153]: caddy.AppConfigDir=/var/lib/caddy/.config/caddyAug 26 11:23:46 caddy caddy[153]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.jsonAug 26 11:23:46 caddy caddy[153]: caddy.Version=v2.10.2 h1:g/gTYjGMD0dec+UgMw8SnfmJ3I9+M2TdvoRL/Ovu6U8=Aug 26 11:23:46 caddy caddy[153]: runtime.GOOS=linuxAug 26 11:23:46 caddy caddy[153]: runtime.GOARCH=amd64Aug 26 11:23:46 caddy caddy[153]: runtime.Compiler=gcAug 26 11:23:46 caddy caddy[153]: runtime.NumCPU=1Aug 26 11:23:46 caddy caddy[153]: runtime.GOMAXPROCS=1Aug 26 11:23:46 caddy caddy[153]: runtime.Version=go1.25.0Aug 26 11:23:46 caddy caddy[153]: os.Getwd=/Aug 26 11:23:46 caddy caddy[153]: LANG=en_US.UTF-8Aug 26 11:23:46 caddy caddy[153]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binAug 26 11:23:46 caddy caddy[153]: NOTIFY_SOCKET=/run/systemd/notifyAug 26 11:23:46 caddy caddy[153]: HOME=/var/lib/caddyAug 26 11:23:46 caddy caddy[153]: LOGNAME=caddyAug 26 11:23:46 caddy caddy[153]: USER=caddyAug 26 11:23:46 caddy caddy[153]: INVOCATION_ID=c513dda9941c428494ac2dd2adc564d5Aug 26 11:23:46 caddy caddy[153]: JOURNAL_STREAM=8:188481008Aug 26 11:23:46 caddy caddy[153]: SYSTEMD_EXEC_PID=153Aug 26 11:23:46 caddy caddy[153]: {“level”:“info”,“ts”:1756218226.980161,“msg”:“using config from file”,“file”:“/etc/caddy/Caddyfile”}Aug 26 11:23:46 caddy caddy[153]: {“level”:“info”,“ts”:1756218226.9943826,“msg”:“adapted config to JSON”,“adapter”:“caddyfile”}Aug 26 11:23:47 caddy caddy[153]: {“level”:“info”,“ts”:1756218227.0038095,“logger”:“admin”,“msg”:“admin endpoint started”,“address”:“0.0.0.0:2019”,“enforce_origin”:false,“origins”:[“//0.0.0.0:2019”]}Aug 26 11:23:47 caddy caddy[153]: {“level”:“warn”,“ts”:1756218227.003832,“logger”:“admin”,“msg”:“admin endpoint on open interface; host checking disabled”,“address”:“0.0.0.0:2019”}Aug 26 11:23:47 caddy caddy[153]: {“level”:“info”,“ts”:1756218227.005127,“logger”:“http.auto_https”,“msg”:“server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS”,“server_name”:“srv0“,“https_port”:443}Aug 26 11:23:47 caddy caddy[153]: {“level”:“info”,“ts”:1756218227.0051765,“logger”:“http.auto_https”,“msg”:“enabling automatic HTTP->HTTPS redirects”,“server_name”:“srv0”}Aug 26 11:23:47 caddy caddy[153]: {“level”:“debug”,“ts”:1756218227.00522,“logger”:“http.auto_https”,“msg”:“adjusted config”,“tls”:{“automation”:{“policies”:[{“subjects”:[“cleanuparr.lab.saadeh.me”,“opnsense.lab.saadeh.me”,“prowlarr.lab.saadeh.me”,“jellyfin.lab.saadeh.me”,“tautulli.lab.saadeh.me”,“ittools.lab.saadeh.me”,“pihole1.lab.saadeh.me”,“pihole2.lab.saadeh.me”,“pihole3.lab.saadeh.me”,“myspeed.lab.saadeh.me”,“torrent.lab.saadeh.me”,“seedbox.lab.saadeh.me”,“mariadb.lab.saadeh.me”,“bazarr.lab.saadeh.me”,“sonarr.lab.saadeh.me”,“radarr.lab.saadeh.me”,“uptime.lab.saadeh.me”,“beszel.lab.saadeh.me”,“komodo.lab.saadeh.me”,“unraid.lab.saadeh.me”,“metube.lab.saadeh.me”,“omada.lab.saadeh.me“,“stash.lab.saadeh.me”,“gitea.lab.saadeh.me”,“plex.lab.saadeh.me”,“z2m.lab.saadeh.me”,“px1.lab.saadeh.me”,“px2.lab.saadeh.me”,“pbs.lab.saadeh.me”,“pdf.lab.saadeh.me”,“rss.lab.saadeh.me”]},{}]}},“http”:{“servers”:{“remaining_auto_https_redirects”:{“listen”:[”:80”],“routes”:[{},{}]},“srv0”:{“listen”:[”:443”],“routes”:[{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.43:11011”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“transport”:{“protocol”:“http”,“tls”:{“insecure_skip_verify”:true},“versions”:[“1.1”,“1.2”]},“upstreams”:[{“dial”:“192.168.10.1:443”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.10:9696”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.10:8096”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.10:8181”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.38:80”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.8:80”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.9:80”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.15:80”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.37:5216”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.10:8080”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.24:8090”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.33:80”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.23:6767”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.10:8989”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.10:7878”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.31:3001”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.25:8090”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.20:9120”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:"subroute",“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.10:80”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.44:8081”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“transport”:{“protocol”:“http”,“tls”:{“insecure_skip_verify”:true}},“upstreams”:[{“dial”:“192.168.10.100:8043”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.36:3000”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.45:3000”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.10:32400”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.5:8099”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“transport”:{“protocol”:“http”,“tls”:{“insecure_skip_verify”:true}},“upstreams”:[{“dial”:“192.168.10.3:8006”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,"transport":{“protocol”:“http”,“tls”:{“insecure_skip_verify”:true}},“upstreams”:[{“dial”:“192.168.10.4:8006”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“transport”:{“protocol”:“http”,“tls”:{“insecure_skip_verify”:true}},“upstreams”:[{“dial”:“192.168.10.80:8007”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.34:8080”}]}]}]}],“terminal”:true},{“handle”:[{“handler”:“subroute”,“routes”:[{“handle”:[{“handler”:“reverse_proxy”,“upstreams”:[{“dial”:“192.168.10.55:80”}]}]}]}],“terminal”:true}],“tls_connection_policies”:[{}],“automatic_https”:{}}}}}Aug 26 11:23:47 caddy caddy[153]: {“level”:“info”,“ts”:1756218227.006913,“logger”:“tls.cache.maintenance”,“msg”:“started background certificate maintenance”,“cache”:“0xc0000e3c80”}Aug 26 11:23:47 caddy caddy[153]: {“level”:“info”,“ts”:1756218227.0070245,“logger”:“http”,“msg”:“servers shutting down with eternal grace period”}Aug 26 11:23:47 caddy caddy[153]: {“level”:“info”,“ts”:1756218227.0070481,“logger”:“tls.cache.maintenance”,“msg”:“stopped background certificate maintenance”,“cache”:“0xc0000e3c80”}Aug 26 11:23:47 caddy caddy[153]: {“level”:“info”,“ts”:1756218227.007096,“msg”:“maxprocs: No GOMAXPROCS change to reset”}Aug 26 11:23:47 caddy caddy[153]: Error: loading initial config: loading new config: loading http app module: provision http: server srv0: setting up route handlers: route 1: loading handler modules: position 0: loading module ‘subroute’: provision http.handlers.subroute: setting up subroutes: route 0: loading handler modules: position 0: loading module ‘reverse_proxy’: provision http.handlers.reverse_proxy: loading transport: loading module ‘http’: provision http.reverse_proxy.transport.http: unsupported HTTP version: 1.2, supported version: 1.1, 2, h2c, 3Aug 26 11:23:47 caddy systemd[1]: caddy.service: Main process exited, code=exited, status=1/FAILUREAug 26 11:23:47 caddy systemd[1]: caddy.service: Failed with result ‘exit-code’.Aug 26 11:23:47 caddy systemd[1]: Failed to start caddy.service - Caddy.

3. Caddy version:

v2.10.2 h1:g/gTYjGMD0dec+UgMw8SnfmJ3I9+M2TdvoRL/Ovu6U8=

4. How I installed and ran Caddy:

I used a proxmox helper script to create the LXC with Caddy / XCaddy / Cloudflare plugin on.

a. System environment:

root@caddy:~# cat /etc/os-releasePRETTY_NAME=“Debian GNU/Linux 12 (bookworm)”NAME=“Debian GNU/Linux”VERSION_ID=“12”VERSION=“12 (bookworm)”VERSION_CODENAME=bookwormID=debianHOME_URL=“https://www.debian.org/”SUPPORT_URL=“https://www.debian.org/support”BUG_REPORT_URL=“https://bugs.debian.org/”root@caddy:~#  cat /etc/debian_version12.11

b. Command:

caddy reload
OR
systemctl restart caddy

c. Service/unit/compose file:

PASTE OVER THIS, BETWEEN THE ``` LINES.
Please use the preview pane to ensure it looks nice.

d. My complete Caddy config:

{
        admin 0.0.0.0:2019
}

(cloudflare) {
        tls {
                dns cloudflare XXXXXXXXXXXXXXXXXXX
        }
}

# Zigbee2MQTT
z2m.lab.saadeh.me {
        reverse_proxy http://192.168.10.5:8099
        import cloudflare
}

# proxmox
px1.lab.saadeh.me {
        reverse_proxy https://192.168.10.3:8006 {
                transport http {
                        tls_insecure_skip_verify
                }
        }
        import cloudflare
}

# proxmox
px2.lab.saadeh.me {
        reverse_proxy https://192.168.10.4:8006 {
                transport http {
                        tls_insecure_skip_verify
                }
        }
        import cloudflare
}
# Proxmox Backup Server
pbs.lab.saadeh.me {
        reverse_proxy https://192.168.10.80:8007 {
                transport http {
                        tls_insecure_skip_verify
                }
        }
        import cloudflare
}
# Omada
omada.lab.saadeh.me {
        reverse_proxy https://192.168.10.100:8043 {
                transport http {
                        tls_insecure_skip_verify
                }
        }
        import cloudflare
}
# OPNSense
opnsense.lab.saadeh.me {
        reverse_proxy https://192.168.10.1 {
                transport http {
                        tls_insecure_skip_verify
                        versions 1.1 1.2
                }
        }
        import cloudflare
}

# Bazarr
bazarr.lab.saadeh.me {
        reverse_proxy http://192.168.10.23:6767
        import cloudflare
}
# Sonarr
sonarr.lab.saadeh.me {
        reverse_proxy http://192.168.10.10:8989
        import cloudflare
}
# Radarr
radarr.lab.saadeh.me {
        reverse_proxy http://192.168.10.10:7878
        import cloudflare
}
# Prowlarr
prowlarr.lab.saadeh.me {
        reverse_proxy http://192.168.10.10:9696
        import cloudflare
}
# Uptime Kuma
uptime.lab.saadeh.me {
        reverse_proxy http://192.168.10.31:3001
        import cloudflare
}
# Stirling PDF
pdf.lab.saadeh.me {
        reverse_proxy http://192.168.10.34:8080
        import cloudflare
}
# IT Tools
ittools.lab.saadeh.me {
        reverse_proxy http://192.168.10.38:80
        import cloudflare
}
# Pihole - Primary
pihole1.lab.saadeh.me {
        reverse_proxy http://192.168.10.8:80
        import cloudflare
}
# Pihole - Backup rPi2B
pihole3.lab.saadeh.me {
        reverse_proxy http://192.168.10.15:80
        import cloudflare
}
# FreshRSS
rss.lab.saadeh.me {
        reverse_proxy http://192.168.10.55:80
        import cloudflare
}
# ByteStash
stash.lab.saadeh.me {
        reverse_proxy http://192.168.10.36:3000
        import cloudflare
}
# Beszel
beszel.lab.saadeh.me {
        reverse_proxy http://192.168.10.25:8090
        import cloudflare
}
# Komodo
komodo.lab.saadeh.me {
        reverse_proxy http://192.168.10.20:9120
        import cloudflare
}
# UNRAID
unraid.lab.saadeh.me {
        reverse_proxy http://192.168.10.10
        import cloudflare
}
# MySpeed
myspeed.lab.saadeh.me {
        reverse_proxy http://192.168.10.37:5216
        import cloudflare
}
# jellyfin
jellyfin.lab.saadeh.me {
        reverse_proxy http://192.168.10.10:8096
        import cloudflare
}
# Tautulli
tautulli.lab.saadeh.me {
        reverse_proxy http://192.168.10.10:8181
        import cloudflare
}
# Plex
plex.lab.saadeh.me {
        reverse_proxy http://192.168.10.10:32400
        import cloudflare
}
# qBitTorrent - Arr Stack
torrent.lab.saadeh.me {
        reverse_proxy http://192.168.10.10:8080
        import cloudflare
}
# qBitTorrent - Seedbox
seedbox.lab.saadeh.me {
        reverse_proxy http://192.168.10.24:8090
        import cloudflare
}
# CleanupArr
cleanuparr.lab.saadeh.me {
        reverse_proxy http://192.168.10.43:11011
        import cloudflare
}
# Gitea
gitea.lab.saadeh.me {
        reverse_proxy http://192.168.10.45:3000
        import cloudflare
}
# Adminer
mariadb.lab.saadeh.me {
        #rewrite * /adminer{uri}
        #rewrite /adminer/* ?{query}
        reverse_proxy http://192.168.10.33
        import cloudflare
}
#Metube
metube.lab.saadeh.me {
        reverse_proxy http://192.168.10.44:8081
        import cloudflare
}

5. Links to relevant resources:

The 1.2 here is not valid. It’s either 1.1, 2, h2c, or 3.

3 Likes

That fixed it, super thanks.

This might sound like a stupid question, but would I find that by myself by reading through any of the logs and errors shown when starting?

I think so:

provision http.reverse_proxy.transport.http: unsupported HTTP version: 1.2, supported version: 1.1, 2, h2c, 3

4 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.