如何从 actix-web 中的 HttpRequest 检索客户端的 IP 地址?

cap*_*ian 10 rust actix-web

是否可以从参数中获取 IP 地址HttpRequest

这是我的代码:

#[get("/collect")]
pub async fn collect(req: HttpRequest) -> impl Responder {
    println!("collect {:?}", req);
    HttpResponse::Ok()
}
Run Code Online (Sandbox Code Playgroud)
[dependencies]
actix-web = "3"
Run Code Online (Sandbox Code Playgroud)

Joh*_*ter 12

如果您在服务前面没有代理,则应该可以从 request 中检索它peer_addr()

否则,您可以检索请求connection_info(),并从那里检索realip_remote_addr().

例子:

#[get("/collect")]
pub async fn collect(req: HttpRequest) -> impl Responder {
    if let Some(val) = req.peer_addr() {
        println!("Address {:?}", val.ip());
    };
    HttpResponse::Ok()
}
Run Code Online (Sandbox Code Playgroud)

  • @captain-yossarian 通常在真实(生产)环境中,客户端不会直接连接到您的 Web 服务器。相反,它们连接到称为“反向代理”的东西,这只是一个不同的服务器,它接受请求并将它们转发到您构建的服务器上(在这种情况下,您需要使用“real_remote_addr”)。反向代理的目的可能包括 1) 提高安全性(代理可以扫描或过滤请求),2) 负载平衡(在服务器的多个实例之间分发请求),或 3) 提供 CSS 样式表和图像等静态文件。 (2认同)