axum-client-ip 0.2.0

A client IP address extractor for Axum
Documentation

License Crates.io Docs.rs

axum-client-ip

A client IP address extractor for Axum

It sequentially looks for an IP in:

  • x-forwarded-for header (de-facto standard)
  • x-real-ip header
  • forwarded header (new standard)
  • axum::extract::ConnectInfo (if not behind proxy)

Usage

use axum::{extract::ConnectInfo, routing::get, Router};
use axum_client_ip::ClientIp;
use std::net::SocketAddr;

pub async fn handler(ClientIp(ip): ClientIp) -> String {
    ip.to_string()
}

#[tokio::main]
async fn main() {
    let app = Router::new().route("/", get(handler));

    axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
        .serve(
            // Don't forget to add `ConnetInfo` if you aren't behind a proxy
            app.into_make_service_with_connect_info::<SocketAddr>()
        )
        .await
        .unwrap()
}

Contributing

We appreciate all kinds of contributions, thank you!

Note on README

The README.md file isn't meant to be changed directly. It instead generated from the crate's docs by the cargo-readme command:

  • Install the command if you don't have it: cargo install cargo-readme
  • Change the crate-level docs in src/lib.rs, or wrapping text in README.tpl
  • Apply the changes: cargo readme > README.md

If you have rusty-hook installed the changes will apply automatically on commit.

License

This project is licensed under the MIT license.