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
}