Caddy 2.11.2 contains numerous bug fixes and enhancements! I know that's a lame summary but it's really all over the place.
Highlights
- Reverse proxy got a lot of love with certain edge cases related to PROXY protocol, health check port, and closing body on retries. Dynamic upstreams are now tracked which enables passive health checking.
- Performance improvements for metrics.
- New
tls_resolversglobal option to control DNS resolvers for all sites when using the ACME DNS challenge. - Log rolling now supports
zstdcompression; deprecatedroll_gzip, which will be removed in the future. Useroll_compressioninstead. - Refined logging and some error messages.
- Fixed a bug in rewrite handler that could cause some URIs to not be rewritten when URI path is an escaped form of target path. Thanks to @MaherAzzouzi for the report.
Security fixes
This release fixes two CVEs.
- @NucleiAv reported a bug in the
forward_authdirective that could permit identity injection and potential privilege escalation. - @sammiee5311 reported that
vars_regexpdouble-expanded placeholders, allowing some unusual configs to reveal secrets.
In addition:
- Built on Go 1.26.1 (also released today) which patches several CVEs.
- Our documentation has been updated to note that file system case sensitivity may affect the behavior of the
hideoption of thefile_serverhandler.
Thank you to everyone who contributed, and for our ongoing sponsorships that make this development possible!
Changelog
- [88616e] api: Add all in-flight requests /reverse_proxy/upstreams (Fixes [#7277]) (#7517)
- [d935a6] autohttps: Ensure CertMagic config is recreated after autohttps runs (#7510)
- [5d20ad] build(deps): bump github.com/smallstep/certificates (#7535)
- [9371ee] build(deps): bump the actions-deps group across 1 directory with 12 updates (#7536)
- [9798f6] caddyhttp: Avoid nil pointer dereference in proxyWrapper (#7521)
- [dc3608] caddyhttp: Collect metrics once per route instead of per handler (#7492)
- [174fa2] caddyhttp: Evaluate tls.client placeholders more accurately (fix [#7530]) (#7534)
- [eac02e] caddyhttp: Limit empty Host check to HTTP/1.1
- [f28306] cmd: Custom binary names through
CustomBinaryNameandCustomLongDescription(#7513) - [cd9e16] cmd: Pass configFile, not configFlag, for reload command (#7532)
- [7b34e3] core: Check whether @id is unique (#7002)
- [566e71] fileserver: document hide case-sensitivity (F-CADDY-FILESERVER-HIDE-CASE-001) (#7548)
- [2dd385] fix(caddyfile): Prevent parser to panic when no token were added by empty {block} (#7543)
- [2dbcde] forward_auth:
copy_headersdoes not strip client-supplied identity headers (Fixes GHSA-7r4p-vjf4-gxv4) (#7545) - [ce203a] go.mod: Upgrade x/net
- [76b198] http: Sort auto-HTTPS redirect routes by host specificity (fixes [#7390]) (#7502)
- [7ffb64] httpcaddyfile: Fix missing TLS connection policies when auto_https is default (#7325) (#7507)
- [45cf61] logging: Ensure
slogerror level logs don't print stack traces (#7512) - [987375] logging: Support
zstdroll compression (#7515) - [294dff] logging: add DirMode options and propagate FileMode to rotations (#7335)
- [a6acb3] proxyproto: Generated test coverage (#7540)
- [11b56c] reverseproxy: Fix
health_portbeing ignored in health checks (#7533) - [db2986] reverseproxy: Track dynamic upstreams, enable passive healthchecking (#7539)
- [d7b21c] reverseproxy: fix tls dialing w/ proxy protocol (#7508)
- [a5e7c6] reverseproxy: prevent body close on dial-error retries (#7547)
- [2ab043] reverseproxy: query escape request urls when proxy protocol is enabled (#7537)
- [fbfb8f] rewrite: Force recomputing path when escaped path matches rewrite target
- [f145bc] tls: Add
tls_resolversglobal option for DNS challenge configuration (#7297)