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.
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.
A valid internal TLS certificate is still unusable on a new operator device until its trust root is installed correctly.
Every extra reverse proxy adds another place for routing, TLS and headers to disagree.
Retry policy is also application semantics: replaying a write may repeat a side effect.
Private tailnet publishing and public internet publishing are different ingress jobs, even when they reach the same container.
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.
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.
Browser security policy is part of application behavior; a blocked fetch can make a healthy backend look unreachable.
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.