反向代理

反向代理是一種伺服器架構,它接收來自客戶端的請求並將其轉發到後端的一個或多個伺服器。與正向代理(代表客戶端)不同,反向代理代表伺服器端工作。

反向代理的主要優勢:

  • 負載平衡:分散請求到多個伺服器
  • 安全性提升:隱藏真實伺服器資訊
  • 內容快取:提高效能
  • 路徑重寫與轉發:靈活地路由請求

Salvo 框架提供反向代理功能的中介軟體.

範例程式碼

use salvo::prelude::*;
use salvo::proxy::Proxy;

#[tokio::main]
async fn main() {
    tracing_subscriber::fmt().init();
    
    let router = Router::new()
        .push(
            Router::new()
                .path("google/{**rest}")
                .handle(Proxy::<Vec<&str>>::new(vec!["https://www.google.com"])),
        )
        .push(
            Router::new()
                .path("baidu/{**rest}")
                .handle(Proxy::<Vec<&str>>::new(vec!["https://www.baidu.com"])),
        );
    let acceptor = TcpListener::new("127.0.0.1:5800").bind().await; Server::new(acceptor).serve(router).await;
}