--- title: Configure Zitadel with Caddy sidebar_label: Caddy description: Configure ZITADEL with Caddy reverse proxy including TLS configuration and Docker setup --- import ProxyGuideOverview from '../_proxy_guide_overview.mdx'; import ProxyGuideTLSMode from '../_proxy_guide_tls_mode.mdx'; import ProxyGuideMore from '../_proxy_guide_more.mdx'; import Compose from "./docker-compose.yaml"; import ConfigDisabled from "./disabled-tls.Caddyfile"; import ConfigExternal from "./external-tls.Caddyfile"; import ConfigEnabled from "./enabled-tls.Caddyfile"; export const providername = 'Caddy'; export const lower = "caddy"; export const link = {providername} You can either setup your environment for TLS mode external or TLS mode enabled. ## TLS mode external ## TLS mode enabled ## Known issues ### TE: trailers header causes requests to hang When a browser sends a `TE: trailers` HTTP header (common with HTTP/2), Caddy may forward it upstream where it conflicts with ZITADEL's gRPC-gateway handling. Requests that result in an error response will hang indefinitely instead of returning the error to the client. **Workaround**: strip the header in Caddy before it reaches ZITADEL: ``` reverse_proxy h2c://zitadel:8080 { header_up -TE } ``` ## More Information