Fluxheim 1.4.0
·
913 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Fluxheim 1.4.0 Release Notes
Fluxheim 1.4.0 is the first production proxy parity release. It consolidates
the planned edge-policy, upstream-resilience, TLS/identity, and HTTP/2/gRPC
proxy work into one larger 1.4 baseline instead of splitting it across several
small unreleased milestones.
Highlights
- Edge policy controls: trusted-proxy-aware IP ACLs, local token-bucket request
limits, in-flight concurrency limits, bounded delay/queue behavior, and
Prometheus counters for policy decisions. - Compression: opt-in gzip, Zstandard, and Brotli response compression with
vhost and route overrides, MIME/size limits, output-size caps, conservative
sensitive-response handling, and cache-safeVary: Accept-Encoding.
Official production profile aliases compile all three codecs; runtime config
still controls which vhosts and routes use them. - Upstream selection and resilience: weighted round-robin, least connections,
power-of-two, source/URI/header/cookie hash selection, consistent-hash
support, backup/drain policies, slow start, retry budgets, passive
failure/5xx/latency ejection, and active HTTP health checks. - Proxy rewrite controls: response
Location,Refresh, andSet-Cookie
domain/path rewrite rules plus routerewrite_prefixmapping for common
NGINX/Apache reverse-proxy migrations. - Observability: structured access log fields for trusted client IP, cache
phase, route, selected upstream, downstream TLS identity, and applied
compression; OTLP spans use resolved route identity and report compression. - TLS and identity: listener client-certificate authentication, downstream TLS
identity header template variables, route/vhost client-cert fingerprint
policy, and admin client-cert fingerprint hardening for trusted terminators. - Upstream protocol controls: upstream certificate and hostname verification
controls, custom trust roots, upstream mTLS client certificates, PROXY
protocol v1/v2 receive/send, upstream HTTP version selection, bounded HTTP/2
controls, and route-scoped gRPC pass-through policy. - Upstream connection tuning: total connection timeout, idle timeout, TCP
keepalive, Linux user timeout, receive-buffer size, DSCP, and TCP Fast Open
controls.
Security Hardening
- Hardened route
strip_prefix/rewrite_prefixforwarding against
double-encoded traversal segments and decoded ASCII control bytes such as
%00. - Replaced concurrency-limit polling waiters with semaphore-backed permits and
boundedmax_queuewaiters so saturated routes cannot create an unbounded
wakeup loop. - Changed admin and route/vhost client-certificate fingerprint list checks to
compare across the full list without short-circuiting on the first matching
byte prefix. - Rejected TLS identity templates in request-header append policies. Use
add/setfor TLS identity headers so Fluxheim strips any inbound spoofed
copy before forwarding the trusted value. - Added
reject_indeterminateto rate-limit policies so operators can reject
requests when no effective client IP is available instead of sharing one
anonymous bucket. - Bounded process-global slice-cache fill concurrency keys and abort on a
poisoned slice-fill lock. - Removed the process ID from generated snapshot IDs returned by the
authenticated admin API. - Documented the shared anonymous rate-limit bucket used when no effective
client IP is available, and added a startup security warning for
admin-client-certificate header gates on loopback listeners.
Compatibility Notes
- The new proxy controls are opt-in. Existing static, proxy, cache, PHP-FPM,
ACME, and FIPS/ISO-capable configurations remain on their existing defaults
unless the new config blocks are enabled. [vhosts.concurrency]and[vhosts.routes.concurrency]now accept
max_queue;0derives a bounded queue size frommax_in_flight.- Compression requires the
compressionfeature plus at least one codec
feature:compression-gzip,compression-zstd, orcompression-brotli.
privacy-moderejects compression at compile time. - Client-certificate authentication requires a configured CA bundle and a TLS
backend path that exposes the needed verification hooks. s2n remains
fail-closed for client-auth and selected upstream PEM-loader paths until the
backend can be wired without panic-prone helpers. - gRPC support is pass-through only. Fluxheim does not perform gRPC-Web or JSON
transcoding in 1.4.0. - Dynamic upstream discovery, file-watched upstream lists, traffic mirroring,
richer regex/template rewrites, local operational sockets, and typed hook
points have been moved to the planned 1.4.1 proxy-operations release.
Checksums And Signatures
- Commit:
8509198c72704fea87901c952706b7dcad7a6193 - Local gate: GitHub CI green before tag; local release metadata checks passed
- CodeQL/code scanning: no open release-blocking alerts before tag
- Source archive checksums:
1e1d7cede7b147d9f2a30d9c992eaec07ef202302eac2f52917e9892c5f7f8f7 fluxheim-1.4.0.tar.gzef31837452bb1c67bdaf440ccc57bad08893393de00712b259442181cd0bf60a fluxheim-1.4.0.zip
- Binary checksums:
2534b80db229e4406a8849e5c81643a6b1f7b799b8b83f77b8a44b729b3f8c7d fluxheim-1.4.0-full-x86_64-linux.tar.gz3be656f31c31862d33cbe495eb530bf4e8d5630aa10b3eb939ec36f0f0383028 fluxheim-1.4.0-cache-x86_64-linux.tar.gzec25debe830c756c67762e922eda45a98d27c5cf2751ef90466d7f8de7cb7198 fluxheim-1.4.0-proxy-x86_64-linux.tar.gz63250dba7363f9f982b39e7954ada3e24dba90ced00def4ce7791dd002af3c2e fluxheim-1.4.0-php-x86_64-linux.tar.gz499aa0da78bfe8a32009974187711e7c9e80756adc6c73efade96b6bd2bd2c6d fluxheim-1.4.0-config-tester-x86_64-linux.tar.gz
- SBOM checksums:
5ff63860c00c39217a3ce673969f839176d30916b98af583dbc96f561632a7a5 fluxheim.spdx.json99a054fc977a6cc798544c7740c29438ee2e1fbbd69a18db97c840d97f1a4cee fluxheim.cyclonedx.json
- Reproducible build:
971a64a81710b1c0ed08458588e7a6cd220a5e02b8a9519cc61a9db477cac42d
- Full Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:06cb2f4a0e0a8ffbd3687108585f612d74cc679aabc44ec3a2ce8d1cf78e8360 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:9aa2c8696a7e864794f33b9c6c401ef95ab846b6ba89bc73478b4ce617885746 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:b5b7bfa55d8976c8651356dbe44571449334bc6923a282a5fed9a9d9658e27d0 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:5f2f992f643ede10aa1a7a192cc978ad28ab182ea57499b0ed78eb7e3d896c7d
- Wolfi:
- Cache Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:002c6bc912183a3b7f48e7a9fe72d9d5575955188b8572507f70f6227d57efe0 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:97f5998ba034afb5fdfc2c7fd249cc93c2595b27ddabc56f6597d8d9288c0532 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:1250403ae2fe05b294233131cc6c4aaece1ec3a8f08d9b516501aa9ce5c3cc18 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:b627694d0af4976b4af231048f8c5eacfffdd7e42657631129c7c6f18234e98f
- Wolfi:
- Proxy Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:68fc0eaa24e0ac3d90c4d378379859ce8d3e71f9f163ebd4e78ed3e2f03f826b - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:a6fadeeb327dda1584882d87f0c8207964f87cb8e97c46e58e4a2ef4b3ffe1d4 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:c0eed77b36f70eaa0bf0e54d6d656b626d6d18ec5e83ee95269763b077f69345 - Debian:
ghcr.io/valkyoth/fluxheim@sha256:9aebd96706a98b5cb3b5900692fe1b87f83a5bfe48f227d2c308a23f99c95644
- Wolfi:
- PHP Build Container digests:
- Wolfi:
ghcr.io/valkyoth/fluxheim@sha256:608853f9f375b7d9bdd371af9d2f7076f7fd7e3647941f6143ca81ad07643ee7 - Alpine:
ghcr.io/valkyoth/fluxheim@sha256:57337998fe0bec876117ced1ee125dd228feb9fdd919409fdb6538185c857bd6 - SUSE Micro:
ghcr.io/valkyoth/fluxheim@sha256:1f208de3ac919ee0831dd729bc15c6064e31f9017f882bb11250848ddf568ebc - Debian:
ghcr.io/valkyoth/fluxheim@sha256:7bc27e183c14ccc977fd928a7b20782a02da8643274974d899a9c682ca1608fb
- Wolfi:
- Tag signature:
Good "git" signature for 1921261+eldryoth@users.noreply.github.com with ED25519 key SHA256:EoLRQ5k4J5pYz3UMFmkrV798gYFNkToGS2xEPvebqB4