pub struct ReverseProxy<C: Connect + Clone + Send + Sync + 'static> { /* private fields */ }
Expand description
A reverse proxy that forwards HTTP requests to an upstream server.
The ReverseProxy
struct handles the forwarding of HTTP requests from a specified path
to a target upstream server. It manages its own HTTP client with configurable settings
for connection pooling, timeouts, and retries.
Implementations§
Source§impl ReverseProxy<HttpsConnector<HttpConnector>>
impl ReverseProxy<HttpsConnector<HttpConnector>>
Sourcepub fn new<S>(path: S, target: S) -> Self
pub fn new<S>(path: S, target: S) -> Self
Creates a new ReverseProxy
instance.
§Arguments
path
- The base path to match incoming requests against (e.g., “/api”)target
- The upstream server URL to forward requests to (e.g., “https://api.example.com”)
§Example
use axum_reverse_proxy::ReverseProxy;
let proxy = ReverseProxy::new("/api", "https://api.example.com");
Source§impl<C: Connect + Clone + Send + Sync + 'static> ReverseProxy<C>
impl<C: Connect + Clone + Send + Sync + 'static> ReverseProxy<C>
Sourcepub fn new_with_client<S>(path: S, target: S, client: Client<C, Body>) -> Self
pub fn new_with_client<S>(path: S, target: S, client: Client<C, Body>) -> Self
Creates a new ReverseProxy
instance with a custom HTTP client.
This method allows for more fine-grained control over the proxy behavior by accepting a pre-configured HTTP client.
§Arguments
path
- The base path to match incoming requests againsttarget
- The upstream server URL to forward requests toclient
- A custom-configured HTTP client
§Example
use axum_reverse_proxy::ReverseProxy;
use hyper_util::client::legacy::{Client, connect::HttpConnector};
use axum::body::Body;
use hyper_util::rt::TokioExecutor;
let client = Client::builder(TokioExecutor::new())
.pool_idle_timeout(std::time::Duration::from_secs(120))
.build(HttpConnector::new());
let proxy = ReverseProxy::new_with_client(
"/api",
"https://api.example.com",
client,
);
Sourcepub async fn proxy_request(
&self,
req: Request<Body>,
) -> Result<Response<Body>, Infallible>
pub async fn proxy_request( &self, req: Request<Body>, ) -> Result<Response<Body>, Infallible>
Handles the proxying of a single request to the upstream server.
Trait Implementations§
Source§impl<C: Clone + Connect + Clone + Send + Sync + 'static> Clone for ReverseProxy<C>
impl<C: Clone + Connect + Clone + Send + Sync + 'static> Clone for ReverseProxy<C>
Source§fn clone(&self) -> ReverseProxy<C>
fn clone(&self) -> ReverseProxy<C>
Returns a duplicate of the value. Read more
1.0.0 · Source§const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<C, S> From<ReverseProxy<C>> for Router<S>
Enables conversion from a ReverseProxy
into an Axum Router
.
impl<C, S> From<ReverseProxy<C>> for Router<S>
Enables conversion from a ReverseProxy
into an Axum Router
.
This implementation allows the reverse proxy to be easily integrated into an Axum application. It handles:
- Path-based routing using the configured base path
- State management using
Arc
for thread-safety - Fallback handling for all HTTP methods
§Example
use axum::Router;
use axum_reverse_proxy::ReverseProxy;
let proxy = ReverseProxy::new("/api", "https://api.example.com");
let app: Router = proxy.into();
Source§fn from(proxy: ReverseProxy<C>) -> Self
fn from(proxy: ReverseProxy<C>) -> Self
Converts to this type from the input type.
Source§impl<C> Service<Request<Body>> for ReverseProxy<C>
impl<C> Service<Request<Body>> for ReverseProxy<C>
Source§type Error = Infallible
type Error = Infallible
Errors produced by the service.
Source§type Future = Pin<Box<dyn Future<Output = Result<<ReverseProxy<C> as Service<Request<Body>>>::Response, <ReverseProxy<C> as Service<Request<Body>>>::Error>> + Send>>
type Future = Pin<Box<dyn Future<Output = Result<<ReverseProxy<C> as Service<Request<Body>>>::Response, <ReverseProxy<C> as Service<Request<Body>>>::Error>> + Send>>
The future response value.
Auto Trait Implementations§
impl<C> Freeze for ReverseProxy<C>where
C: Freeze,
impl<C> !RefUnwindSafe for ReverseProxy<C>
impl<C> Send for ReverseProxy<C>
impl<C> Sync for ReverseProxy<C>
impl<C> Unpin for ReverseProxy<C>where
C: Unpin,
impl<C> !UnwindSafe for ReverseProxy<C>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<S, R> ServiceExt<R> for Swhere
S: Service<R>,
impl<S, R> ServiceExt<R> for Swhere
S: Service<R>,
Source§fn into_make_service(self) -> IntoMakeService<S>
fn into_make_service(self) -> IntoMakeService<S>
Convert this service into a
MakeService
, that is a Service
whose
response is another service. Read moreSource§fn into_make_service_with_connect_info<C>(
self,
) -> IntoMakeServiceWithConnectInfo<S, C>
fn into_make_service_with_connect_info<C>( self, ) -> IntoMakeServiceWithConnectInfo<S, C>
Convert this service into a
MakeService
, that will store C
’s
associated ConnectInfo
in a request extension such that ConnectInfo
can extract it. Read moreSource§fn handle_error<F, T>(self, f: F) -> HandleError<Self, F, T>
fn handle_error<F, T>(self, f: F) -> HandleError<Self, F, T>
Convert this service into a
HandleError
, that will handle errors
by converting them into responses. Read moreSource§impl<T, Request> ServiceExt<Request> for T
impl<T, Request> ServiceExt<Request> for T
Source§fn ready(&mut self) -> Ready<'_, Self, Request>where
Self: Sized,
fn ready(&mut self) -> Ready<'_, Self, Request>where
Self: Sized,
Yields a mutable reference to the service when it is ready to accept a request.
Source§fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
Self: Sized,
fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
Self: Sized,
Yields the service when it is ready to accept a request.
Source§fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
Self: Sized,
fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
Self: Sized,
Consume this
Service
, calling it with the provided request once it is ready.Source§fn and_then<F>(self, f: F) -> AndThen<Self, F>
fn and_then<F>(self, f: F) -> AndThen<Self, F>
Executes a new future after this service’s future resolves. This does
not alter the behaviour of the
poll_ready
method. Read moreSource§fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
Maps this service’s response value to a different value. This does not
alter the behaviour of the
poll_ready
method. Read moreSource§fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
Maps this service’s error value to a different value. This does not
alter the behaviour of the
poll_ready
method. Read moreSource§fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
Maps this service’s result type (
Result<Self::Response, Self::Error>
)
to a different value, regardless of whether the future succeeds or
fails. Read moreSource§fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
Composes a function in front of the service. Read more
Source§fn filter_async<F, NewRequest>(self, filter: F) -> AsyncFilter<Self, F>where
Self: Sized,
F: AsyncPredicate<NewRequest>,
fn filter_async<F, NewRequest>(self, filter: F) -> AsyncFilter<Self, F>where
Self: Sized,
F: AsyncPredicate<NewRequest>,
Composes this service with an
AsyncFilter
that conditionally accepts or
rejects requests based on an [async predicate]. Read moreSource§fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
Composes an asynchronous function after this service. Read more
Source§fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
Composes a function that transforms futures produced by the service. Read more