v2.11.2
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
- 88616e86e6e656738426bb86b4a42dcc20a59f77 api: Add all in-flight requests /reverse_proxy/upstreams (Fixes #7277) (#7517)
- d935a6956c16902623b8e8f6d1aafec4f6124f46 autohttps: Ensure CertMagic config is recreated after autohttps runs (#7510)
- 5d20adc7a97f70d6fe722099356cca2027908576 build(deps): bump github.com/smallstep/certificates (#7535)
- 9371ee67c64d2d2c81f9530be0d9749ecdbd2b00 build(deps): bump the actions-deps group across 1 directory with 12 updates (#7536)
- 9798f6964d58eb5703d1498804962faca2dae4ea caddyhttp: Avoid nil pointer dereference in proxyWrapper (#7521)
- dc360828598440beb1dfdb21c0ba14e09bcd565b caddyhttp: Collect metrics once per route instead of per handler (#7492)
- 174fa2ddb93f830370b05058d1ea51ad1512597d caddyhttp: Evaluate tls.client placeholders more accurately (fix #7530) (#7534)
- eac02ee98f9f61d79ae774aa49aa102ddf2076ba caddyhttp: Limit empty Host check to HTTP/1.1
- f283062d37c50627d53ca682ebae2ce219b35515 cmd: Custom binary names through
CustomBinaryNameandCustomLongDescription(#7513) - cd9e1660aa454e6536ad740c9d1aaecf3c3552ed cmd: Pass configFile, not configFlag, for reload command (#7532)
- 7b34e3107eb6071fea3a3f94a5c913c32a55afd0 core: Check whether @id is unique (#7002)
- 566e710991a6b752933178e2c6126181efc563aa fileserver: document hide case-sensitivity (F-CADDY-FILESERVER-HIDE-CASE-001) (#7548)
- 2dd3852416e2b04bc90b98643673ec9e131c32e6 fix(caddyfile): Prevent parser to panic when no token were added by empty {block} (#7543)
- 2dbcdefbbee68e7b4a31ac66361a0f4e3bcd2eea forward_auth:
copy_headersdoes not strip client-supplied identity headers (Fixes GHSA-7r4p-vjf4-gxv4) (#7545) - ce203aa9e1ff2686777019f45c36c283debb7986 go.mod: Upgrade x/net
- 76b198f586e4e2482a0278ba52c176cff70af8cf http: Sort auto-HTTPS redirect routes by host specificity (fixes #7390) (#7502)
- 7ffb640a4da666203ab43396eaeb2b6b84bb983f httpcaddyfile: Fix missing TLS connection policies when auto_https is default (#7325) (#7507)
- 45cf61b1276b2cf79ce0147df8fa48c96e8e5356 logging: Ensure
slogerror level logs don't print stack traces (#7512) - 987375297862d9cd0a3fa33cfb199c25e504ad1b logging: Support
zstdroll compression (#7515) - 294dfff4435c31b7c8d20d26067365b0a0016610 logging: add DirMode options and propagate FileMode to rotations (#7335)
- a6acb3902cb6453153db0738bd8210e093449ce1 proxyproto: Generated test coverage (#7540)
- 11b56c6cfc25f8c814fa66cb02060548d12c4040 reverseproxy: Fix
health_portbeing ignored in health checks (#7533) - db2986028fc573ae3add0a9a3381268dd7599267 reverseproxy: Track dynamic upstreams, enable passive healthchecking (#7539)
- d7b21c610494e30e147de77a4783c18e5f206d99 reverseproxy: fix tls dialing w/ proxy protocol (#7508)
- a5e7c6e232573b8a8df2946914a84a36070d4b9f reverseproxy: prevent body close on dial-error retries (#7547)
- 2ab043b8903db4574b2fc7a625619018a072f082 reverseproxy: query escape request urls when proxy protocol is enabled (#7537)
- fbfb8fc517728f85890cd46559c01bec9495bf17 rewrite: Force recomputing path when escaped path matches rewrite target
- f145bce553a306ca6890fea782ca4e3b06787bbb tls: Add
tls_resolversglobal option for DNS challenge configuration (#7297)