Your Caddy Admin API Is a Deployment Interface - Treat It Like Root
The admin endpoint can replace active configuration, so broad exposure changes the security boundary of the edge.
TOPIC
Lessons, explainers, experiments, and implementation notes.
The admin endpoint can replace active configuration, so broad exposure changes the security boundary of the edge.
A 502 usually means the browser-to-Caddy leg worked and the Caddy-to-upstream leg did not.
Retry policy is also application semantics: replaying a write may repeat a side effect.
Client-side routes exist only after index.html loads; the server still needs a fallback for direct requests.
Path-based access control is safest when protected and public branches cannot accidentally fall through.
Multiple proxies are fine when each boundary has one explicit owner.
Auth gateways need the original request context to decide and redirect correctly.
Stripping a prefix is easy; making the application believe it lives under that prefix is harder.
DNS challenge syntax only works when the running binary contains that provider module.
Wildcard ACME certificates require DNS validation of the parent zone.
Private TLS is only trusted by clients that possess and trust the private root CA.
Caddy 2.11 changed default Host behavior for HTTPS upstreams, exposing apps that relied on the old value.
ACME automation still depends on the challenge traffic reaching the Caddy instance that requested the certificate.
Logs become useful when access records, proxy errors and request identity can be correlated.
A synthetic health request measures the service only if it looks like a request the service considers valid.
Normal HTTP can succeed while a WebSocket upgrade fails on the same application.
Keepalive timeout mismatches can fail a request even while proxy and backend are otherwise healthy.
Original client IP is trustworthy only when Caddy knows which proxy was allowed to write it.
Caddy has graceful config reloads; restarting the process turns a routing edit into avoidable downtime.
The most common Docker reverse-proxy mistake is technically valid networking aimed at the wrong namespace.
The edge process can be green while one proxied service is failing behind it.
Docker DNS only resolves service names inside the networks where those services actually meet.
Identity headers are safe only when clients cannot inject equivalent values around the auth boundary.
A proxied 5xx status is a response, not automatically a Caddy handler error.
Internal HTTPS between proxies is useful only when the caller can verify the upstream identity.
A catch-all frontend fallback can hide backend routing mistakes behind a successful HTML response.
Repeated auth, TLS and header policy drifts when every site block is cloned by hand.
External redirects, internal rewrites and upstream canonicalization are different tools even when they change the same path.
An IP can be the correct route to an upstream while being the wrong identity for its certificate.
The failing TLS identity may be on the Cloudflare-to-origin leg rather than in Caddy's upstream proxy.