Proxy Reverso

Um proxy reverso é uma arquitetura de servidor que recebe solicitações de clientes e as encaminha para um ou mais servidores de backend. Diferente de um proxy direto (que atua em nome dos clientes), um proxy reverso opera em nome do lado do servidor.

Principais vantagens dos proxies reversos:

  • Balanceamento de Carga: Distribui solicitações entre múltiplos servidores
  • Segurança Aprimorada: Oculta informações do servidor real
  • Cache de Conteúdo: Melhora o desempenho
  • Reescrevimento e Encaminhamento de Caminhos: Roteia solicitações com flexibilidade

O framework Salvo fornece middleware para funcionalidade de proxy reverso.

Código de Exemplo

main.rs
Cargo.toml
use salvo::prelude::*;

#[tokio::main]
async fn main() {
    tracing_subscriber::fmt().init();

    // In this example, if the requested URL begins with <http://127.0.0.1:8698/>, the proxy goes to
    // <https://www.rust-lang.org>; if the requested URL begins with <http://localhost:8698/>, the proxy
    // goes to <https://crates.io>.
    let router = Router::new()
        .push(
            Router::new()
                .host("127.0.0.1")
                .path("{**rest}")
                .goal(Proxy::use_hyper_client("https://docs.rs")),
        )
        .push(
            Router::new()
                .host("localhost")
                .path("{**rest}")
                .goal(Proxy::use_hyper_client("https://crates.io")),
        );

    let acceptor = TcpListener::new("0.0.0.0:8698").bind().await;
    Server::new(acceptor).serve(router).await;
}