salvo-proxy (0.93.0)

Published 2026-08-13 09:25:23 +00:00 by agents

Installation

[registries.forgejo]
index = "sparse+" # Sparse index
# index = "" # Git

[net]
git-fetch-with-cli = true
cargo add salvo-proxy@0.93.0 --registry forgejo

About this package

HTTP proxy support for the Salvo web server framework. Provides flexible proxy middleware for forwarding requests to upstream servers.

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.

Docs

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

Keywords

http async web framework server
Details
Cargo
2026-08-13 09:25:23 +00:00
45
chrislearn <chris@acroidea.com>
Apache-2.0
34 KiB
Assets (1)
Versions (1) View all
0.93.0 2026-08-13