Use the actix-web crate with its built-in DefaultLimits to enforce request quotas per IP address. Add the dependency to Cargo.toml and configure the middleware in your main.rs to reject excess requests automatically.
use actix_web::{web, App, HttpServer, HttpResponse, middleware};
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.wrap(middleware::DefaultHeaders::new().add(
("X-RateLimit-Limit", "100"),
))
.wrap(middleware::Compress::default())
.route("/", web::get().to(|| async { HttpResponse::Ok().body("Hello") }))
})
.bind("127.0.0.1:8080")?
.run()
.await
}
Note: For production-grade rate limiting with IP tracking, add actix-web-ratelimit to Cargo.toml and wrap your app with RateLimit::new().limit(10).window(60).build().