# Truncated, sanitized example - real Caddyfile has one block per app. # Shows the pattern: mTLS + Authentik forward-auth in front of every # reverse-proxied service. { servers { protocols h1 h2 } } # ------------------------- # mTLS # ------------------------- (local_mtls) { tls /etc/caddy/certs/example.com.crt /etc/caddy/certs/example.com.key { client_auth { mode require_and_verify trust_pool file { pem_file /etc/caddy/certs/example.com.ca.crt } } } } # ------------------------- # Authentik forward auth # ------------------------- (authentik_forward_auth) { forward_auth http://authentik.internal:9054 { uri /outpost.goauthentik.io/auth/caddy trusted_proxies private_ranges header_up Host {host} header_up X-Forwarded-Host {host} header_up X-Forwarded-Proto {scheme} header_up X-Forwarded-For {remote_host} header_up X-Real-IP {remote_host} copy_headers { X-Authentik-Username X-Authentik-Email X-Authentik-Groups X-Authentik-Uid } } } # ------------------------- # Example app entries # ------------------------- app1.example.com { import local_mtls import authentik_forward_auth reverse_proxy http://app1.internal:8080 } app2.example.com { import local_mtls reverse_proxy http://app2.internal:9000 { header_up Host {host} header_up X-Forwarded-Host {host} header_up X-Forwarded-Proto {scheme} header_up X-Forwarded-For {remote_host} header_up X-Real-IP {remote_host} } }