3.0.0-beta.11
Pre-release
Pre-release
Added
HTTP server core
- Support for listening to multiple IP addresses: multiple IP addresses can now be specified in the
listensubdirective intcpblock for TCP and QUIC, allowing the server to listen on multiple selected network interfaces.
Forwarded auth
- Forwarded auth
intercept_errorssubdirective: addedintercept_errorssubdirective to forwarded auth stage, allowing custom handling of upstream error responses, similarly tointercept_errorssubdirective for reverse proxying. - Forwarded auth
request_headersubdirective: addedrequest_headersubdirective toauth_to, allowing headers to be added (+Name), removed (-Name), or replaced (Name) on the request sent to the auth backend, mirroring the reverse proxy'srequest_headersubdirective.
Changed
Runtime
io_uringdisabled by default:io_uringis now disabled by default in the runtime configuration, as small static file serving and reverse proxying performance turned out to be slower than withepoll.
Static file serving
- Symlink check performance optimizations: optimized symlink check performance by caching the results in file open cache along with opened files.
HTTP caching
- HTTP caching performance optimizations: performed multiple internal throughput optimizations to the in-memory HTTP cache store, especially on the cache hit path.
- Cache key fingerprinting improvements for observability: truncated cache key (up to 48 characters) with the query string removed, useful for diagnosing why a specific request missed. Optionally with a short non-reversible tag (
q=<16 hex chars>), and if the base itself had to be truncated, a second tag (h=<16 hex chars>). - Cache metrics improvements: cache decision reasons are now attached to access log entries and cache metrics.
Forwarded auth
- Forwarded auth
X-Real-IPheader: addedX-Real-IPheader to forwarded auth requests, with same value as reverse-proxied requests.
Fixed
Configuration
- Empty configuration validation: added a check for empty configurations (no ports, no global directives/matchers) to return an error instead of silently starting.
- Protocol + IP + port host block split fix: previously, the protocol+IP+port combination was not properly split when used as a host block (for example,
http 127.0.0.1:18081lead to two host blocks:http 127and0.0.1:18081).
HTTP server core
request.uriinterpolation fix: previously,request.uriinterpolation included the full request URL, including thehttp/httpsscheme and hostname. This had been changed to only include the path and query string.- HTTP status code for overlong paths: previously, overlong file paths led to 500 Internal Server Error status code to be returned. This has been changed to return 400 Bad Request instead.
Logging
- Reduced startup logs: removed multiple startup logs for various features to reduce noise in the logs.
Static file serving
- Static file serving symlink settings fix: previously, symlink mode (follow or not) was not properly respected when serving precompressed static files.
TLS
- Certificate and private key mismatch fix: previously, when a certificate and private key did not match for a given host, this was silently allowed. This has been changed to error out on the startup of the server.