Skip to content

Commit da20503

Browse files
committed
Initial code
1 parent 893a328 commit da20503

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

cargo.tml/cargo.tml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "reverse_proxy"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
hyper = { version = "0.14", features = ["full"] }
8+
tokio = { version = "1", features = ["full"] }

src/main.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
use hyper::service::{make_service_fn, service_fn};
2+
use hyper::{Body, Client, Request, Response, Server, Uri};
3+
use std::convert::Infallible;
4+
use std::net::SocketAddr;
5+
6+
async fn handle_request(req: Request<Body>) -> Result<Response<Body>, hyper::Error> {
7+
    // Define the target backend server
8+
    let target = "http://example.com";
9+
    
10+
    // Build the new URI for the target server
11+
    let uri = format!("{}{}", target, req.uri().path_and_query().map(|x| x.as_str()).unwrap_or(""))
12+
        .parse::<Uri>()
13+
        .expect("Invalid URI");
14+
15+
    // Create a new request to the target server
16+
    let mut new_req = Request::builder()
17+
        .method(req.method())
18+
        .uri(uri)
19+
        .body(req.into_body())
20+
        .expect("Failed to build request");
21+
22+
    // Copy headers from the original request
23+
    *new_req.headers_mut() = req.headers().clone();
24+
25+
    // Send the request to the target server
26+
    let client = Client::new();
27+
    let response = client.request(new_req).await?;
28+
29+
    Ok(response)
30+
}
31+
32+
#[tokio::main]
33+
async fn main() {
34+
    // Define the address to listen on
35+
    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
36+
37+
    // Create a service to handle incoming requests
38+
    let make_service = make_service_fn(|_conn| async {
39+
        Ok::<_, Infallible>(service_fn(handle_request))
40+
    });
41+
42+
    // Start the server
43+
    let server = Server::bind(&addr).serve(make_service);
44+
45+
    println!("Reverse proxy running on http://{}", addr);
46+
47+
    // Run the server
48+
    if let Err(e) = server.await {
49+
        eprintln!("Server error: {}", e);
50+
    }

0 commit comments

Comments
 (0)