XForwardedMiddleware#

class safir.middleware.x_forwarded.XForwardedMiddleware(app, *, proxies=None)#

Bases: BaseHTTPMiddleware

Middleware to update the request based on X-Forwarded-For.

The remote IP address will be replaced with the right-most IP address in X-Forwarded-For that is not contained within one of the trusted proxy networks.

If X-Forwarded-For is found and X-Forwarded-Proto is also present, the corresponding entry of X-Forwarded-Proto is used to replace the scheme in the request scope. If X-Forwarded-Proto only has one entry (ingress-nginx has this behavior), that one entry will become the new scheme in the request scope.

The contents of X-Forwarded-Host will be stored as forwarded_host in the request state if it and X-Forwarded-For are present. Normally this is not needed since NGINX will pass the original Host header without modification.

Parameters:
  • proxies (Optional[List[_BaseNetwork]], default: None) – The networks of the trusted proxies. If not specified, defaults to the empty list, which means only the immediately upstream proxy will be trusted.

  • app (FastAPI) –

Methods Summary

dispatch(request, call_next)

Middleware to update the request based on X-Forwarded-For.

Methods Documentation

async dispatch(request, call_next)#

Middleware to update the request based on X-Forwarded-For.

Parameters:
  • request (Request) – The incoming request.

  • call_next (Callable[[Request], Awaitable[Response]]) – The next step in the processing stack.

Returns:

The response with additional information about proxy headers.

Return type:

fastapi.Response