salvo-proxy (0.93.0)
Installation
[registries.forgejo]
index = "sparse+ " # Sparse index
# index = " " # Git
[net]
git-fetch-with-cli = truecargo add salvo-proxy@0.93.0 --registry forgejoAbout this package
Salvo is an extremely simple and powerful Rust web backend framework. Only basic Rust knowledge is required to develop backend services.
salvo-proxy
Proxy middleware for Salvo
This crate provides proxy capabilities for the Salvo web framework, allowing you to forward requests to upstream servers. It's useful for creating API gateways, load balancers, and reverse proxies.
Features
- Support for HTTP and HTTPS proxying
- Multiple upstream server selection strategies
- WebSocket connection support
- Header manipulation
- Path and query rewriting
- Multiple HTTP client backends (Hyper, Reqwest)
Usage
This is an official crate, so you can enable it in Cargo.toml like this:
salvo = { version = "*", features = ["proxy"] }
Path forwarding
The default path getter forwards the wildcard tail captured by routes such as
Router::with_path("api/{**rest}"). If the upstream is http://backend, the
gateway path /api/users is forwarded to http://backend/users. If the backend
also expects the /api prefix, configure the upstream with that base path:
http://backend/api.
Proxy uses strict path normalization by default. It rejects literal .. path
segments and ambiguous encoded path characters before forwarding, then
normalizes safe paths. This is useful when the proxy is used as an
access-control boundary and the upstream may perform an additional URL decode or
normalization pass:
use salvo::prelude::*;
use salvo::proxy::Proxy;
let router = Router::with_path("api/{**rest}").goal(
Proxy::use_hyper_client("http://backend/api")
.strict_path_normalization(true),
);
Strict path normalization rejects literal parent-directory components and
percent-encoded ., /, \, and % characters in the proxied path tail,
including cases such as .., %2e%2e, %2f, %5c, and double-encoded forms
that remain percent-encoded after Salvo routing extracts the tail. Backends
should still validate and normalize their own routes and file paths; this option
only prevents common proxy/backend path interpretation mismatches.
Forwarded headers
The default host header getter (standard_host_header_getter) forwards the
upstream host and includes a non-default port, for example example.com:8080
(per RFC 7230 / RFC 9110). Configure default_host_header_getter if you want to
forward only the bare host name without the port.
Client IP forwarding overwrites any inbound X-Forwarded-For value with the
direct client IP from the connection. This avoids trusting a client-supplied
forwarding chain.
☕ Donate
Salvo is an open source project. If you want to support Salvo, you can ☕ buy me a coffee here.
⚠️ License
Salvo is licensed under Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0).
Dependencies
| ID | Version |
|---|---|
| fastrand | ^2 |
| futures-util | ^0.3 |
| hyper | ^1 |
| hyper-rustls | ^0.27 |
| hyper-util | ^0.1 |
| percent-encoding | ^2 |
| reqwest | ^0.13 |
| rustls | ^0.23 |
| salvo_core | ^0.93.0 |
| tokio | ^1 |
| tracing | ^0.1 |
| futures-util | ^0.3 |
| rustls | ^0.23 |
| salvo_core | ^0.93.0 |
| salvo_extra | ^0.93.0 |
| tokio-tungstenite | ^0.29 |