v2.11.2
actix/actix-webv2.11.2Mar 6, 2026by github-actions[bot]
AI Summary
This release focuses on reverse proxy enhancements including dynamic upstreams with passive health checking, performance improvements for metrics, and new logging compression support using zstd. It also addresses several security vulnerabilities.
Key Highlights
- Reverse proxy improvements: dynamic upstreams with passive health checking, PROXY protocol fixes, and health check port handling.
- Performance improvements for metrics collection.
- New `tls_resolvers` global option for controlling DNS resolvers in ACME DNS challenges.
- Log rolling now supports `zstd` compression (deprecated `roll_gzip`).
- Security fixes for CVEs including issues in `forward_auth` and `vars_regexp`.
New Features
- Passive health checking for dynamic upstreams
- Zstd compression for log rolling
- Global `tls_resolvers` option for ACME DNS challenge
- Fixed bug in rewrite handler causing URIs not to be rewritten
Full Release Notes
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_resolvers` global option to control DNS resolvers for all sites when using the ACME DNS challenge.
- Log rolling now supports `zstd` compression; deprecated `roll_gzip`, which will be removed in the future. Use `roll_compression` instead.
- 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_auth` directive that could permit identity injection and potential privilege escalation.
- @sammiee5311 reported that `vars_regexp` double-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 `hide` option of the `file_server` handler.
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 `CustomBinaryName` and `CustomLongDescription` (#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_headers` does 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 `slog` error level logs don't print stack traces (#7512)
* 987375297862d9cd0a3fa33cfb199c25e504ad1b logging: Support `zstd` roll compression (#7515)
* 294dfff4435c31b7c8d20d26067365b0a0016610 logging: add DirMode options and propagate FileMode to rotations (#7335)
* a6acb3902cb6453153db0738bd8210e093449ce1 proxyproto: Generated test coverage (#7540)
* 11b56c6cfc25f8c814fa66cb02060548d12c4040 reverseproxy: Fix `health_port` being 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_resolvers` global option for DNS challenge configuration (#7297)