This commit is contained in:
Mateusz Gruszczyński committed 2026-10-06 23:08:43 +02:00
1 parent 5d2aaeabe6
commit 9d6614c1b4
62 files changed
+558 -230

No files matched your search

+28 -13
View File
@@ -1,9 +1,9 @@
# RustProxy 0.26.6
# RustProxy 0.26.7
Independent Rust reverse proxy and static Web Server with a dashboard, SQLite configuration,
streaming HTTP/TLS/WebSocket forwarding, raw TCP/UDP stream hosts, IP-bound vhosts and backend pools.
**0.26.6 release source.**
**0.26.7 release source.**
## Layer-4 streams
@@ -11,7 +11,18 @@ Raw TCP/UDP forwarding has its own **Streams** page in the primary navigation, a
Named HTTP/HTTPS listener bind addresses use the same chip-style editor as vhost hostnames, including multi-address listeners.
## What changed in 0.26.6
## What changed in 0.26.7
- Show explicit HOT and COLD cache occupancy progress on `/cache`, including object-count and byte/disk limits from Cache settings plus percentage usage.
- Preserve compatible upstream client pools across unrelated active-snapshot rebuilds so generation age, request count and `Rotations` diagnostics do not restart at zero unless the backend connection policy actually changes.
- Keep age-based backend rotation in the maintenance loop and retain request-count rotation; compatible snapshot reuse now makes the existing counters observable over long-running processes.
- Refresh container documentation and ship the OCI image with one pinned Certbot environment containing all RustProxy-supported DNS plugins: Cloudflare, OVH and RFC2136.
- Review current installation/container/cache/backend lifecycle documentation for stale version or behavior statements.
- Keep SQLite schema 8 and the saved proxy configuration format unchanged; upgrading from 0.26.6 requires no data migration.
0.26.7 retains the 0.26.6 access-policy and administration fixes below.
### Retained 0.26.6 release notes
- Keep backend diagnostics visible-column selection, sort key and sort direction synchronized with the account-scoped administrator preferences whenever preferences are loaded or updated.
- Clear the ACME certificate-creation form after the issuance job finishes successfully, so successful certificates do not leave stale values while failed jobs keep the non-secret form values available for correction.
@@ -66,7 +77,7 @@ Named HTTP/HTTPS listener bind addresses use the same chip-style editor as vhost
- Replace backend sort text (`A-Z` / `Z-A`) with direction arrows (`↑` / `↓`).
- Keep SQLite schema 8 and the saved proxy configuration format unchanged; upgrading from 0.26.1 requires no data migration.
The detailed 0.25.5 implementation audit remains available as historical baseline evidence. Current 0.26.6 verification status is maintained in [docs/TEST_REPORT.md](docs/TEST_REPORT.md).
The detailed 0.25.5 implementation audit remains available as historical baseline evidence. Current 0.26.7 verification status is maintained in [docs/TEST_REPORT.md](docs/TEST_REPORT.md).
## Documentation
@@ -144,7 +155,7 @@ CARGO_BUILD_JOBS=1 CARGO_PROFILE_RELEASE_LTO=false \
CARGO_PROFILE_RELEASE_CODEGEN_UNITS=8 cargo build --release --locked
```
The 0.26.6 source archive preserves the resolved `Cargo.lock` supplied with the source tree and
The 0.26.7 source archive preserves the resolved `Cargo.lock` supplied with the source tree and
updates only this package's own version entry. This packaging environment has no Cargo, so the
dependency graph was not re-resolved here. On the compiler-enabled deployment host, run the
locked check/test/release gates below and retain the verified lockfile. `dev.sh` can generate a
@@ -292,17 +303,21 @@ demotes LRU/idle hot objects. Cold objects survive process restart for the same
configuration revision and are promoted to RAM on a fresh hit. Large fill buffers grow
incrementally and consume multiple permits. Actual process RSS also includes in-flight
responses, compression buffers and runtime allocations. HIT/MISS/BYPASS, hit count and
standardized RFC 9211 `Cache-Status` diagnostics are independently optional; required Age remains on cache hits. Optional `X-Cache-Resident-Age` tracks RustProxy residency and now survives revalidation/tier movement.
standardized RFC 9211 `Cache-Status` diagnostics are independently optional; required `Age` advances on ordinary cache hits even when the origin does not send `Age`. A successful origin `304 Not Modified` starts a new freshness-age calculation, so the next `Age` may legitimately be `0`; optional `X-Cache-Resident-Age` tracks RustProxy residency across revalidation and tier movement.
Purge is authenticated, CSRF-protected, audited and invalidates both tiers plus older
fills. See [cache behavior and limits](docs/CACHE.md) and
[cache diagnostics](docs/CACHE_DIAGNOSTICS.md).
Response compression is streamed and negotiated with Accept-Encoding; enabled
algorithms are gzip, Brotli, Zstandard and deflate. Privacy-sensitive, ranged,
upgraded, pre-encoded and no-transform responses are excluded. Strong ETags are
weakened after transformation, and obsolete content digests are removed. Server
policy is applied after generic response rules. Protected framing/identity headers
cannot be edited through generic rules.
Response compression is streamed and negotiated with `Accept-Encoding`; enabled
algorithms are gzip, Brotli, Zstandard and deflate, and the selected algorithm is
reported in `Content-Encoding` with `Vary: Accept-Encoding`. Compression is disabled
by default and must be enabled in Settings. Privacy-sensitive, ranged, upgraded,
pre-encoded and `no-transform` responses are excluded. Cookie-bearing requests are
also excluded unless the response is an already accepted shared-cache HIT or a local
static Web Server response. Strong ETags are weakened after transformation, and
obsolete content digests are removed. Server policy is applied after generic response
rules. Protected framing/identity headers and cache-owned `Age` cannot be edited
through generic rules.
With the separate demo enabled, `/cache-demo` returns an explicitly public 30-second
object. Enable cache and X-Cache in Settings, then issue this twice without cookies:
@@ -383,7 +398,7 @@ python3 scripts/release_smoke.py
# Runs those checks first, then the Rust suite when Cargo is available:
bash dev.sh test
# Source-only package, with no Git checkout required:
python3 make_zip.py /tmp/RustProxy-0.26.6.zip
python3 make_zip.py /tmp/RustProxy-0.26.7.zip
```
## New management and test-origin guide