-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Reverse proxy HTTP requests, either over raw sockets or with WAI -- -- Provides a simple means of reverse-proxying HTTP requests. The raw -- approach uses the same technique as leveraged by keter, whereas the -- WAI approach performs full request/response parsing via WAI and -- http-conduit. @package http-reverse-proxy @version 0.4.0 module Network.HTTP.ReverseProxy -- | Host/port combination to which we want to proxy. data ProxyDest ProxyDest :: !ByteString -> !Int -> ProxyDest pdHost :: ProxyDest -> !ByteString pdPort :: ProxyDest -> !Int -- | Set up a reverse proxy server, which will have a minimal overhead. -- -- This function uses raw sockets, parsing as little of the request as -- possible. The workflow is: -- --
    --
  1. Parse the first request headers.
  2. --
  3. Ask the supplied function to specify how to reverse proxy.
  4. --
  5. Open up a connection to the given host/port.
  6. --
  7. Pass all bytes across the wire unchanged.
  8. --
-- -- If you need more control, such as modifying the request or response, -- use waiProxyTo. rawProxyTo :: (MonadBaseControl IO m, MonadIO m) => (RequestHeaders -> m (Either (AppData -> m ()) ProxyDest)) -> AppData -> m () -- | Creates a WAI Application which will handle reverse proxies. -- -- Connections to the proxied server will be provided via http-conduit. -- As such, all requests and responses will be fully processed in your -- reverse proxy. This allows you much more control over the data sent -- over the wire, but also incurs overhead. For a lower-overhead -- approach, consider rawProxyTo. -- -- Most likely, the given application should be run with Warp, though in -- theory other WAI handlers will work as well. -- -- Note: This function will use chunked request bodies for communicating -- with the proxied server. Not all servers necessarily support chunked -- request bodies, so please confirm that yours does (Warp, Snap, and -- Happstack, for example, do). waiProxyTo :: (Request -> IO WaiProxyResponse) -> (SomeException -> Application) -> Manager -> Application -- | Sends a simple 502 bad gateway error message with the contents of the -- exception. defaultOnExc :: SomeException -> Application waiProxyToSettings :: (Request -> IO WaiProxyResponse) -> WaiProxySettings -> Manager -> Application -- | The different responses that could be generated by a -- waiProxyTo lookup function. -- -- Since 0.2.0 data WaiProxyResponse -- | Respond with the given WAI Response. -- -- Since 0.2.0 WPRResponse :: Response -> WaiProxyResponse -- | Send to the given destination. -- -- Since 0.2.0 WPRProxyDest :: ProxyDest -> WaiProxyResponse -- | Send to the given destination, but use the given modified Request for -- computing the reverse-proxied request. This can be useful for reverse -- proxying to a different path than the one specified. By the user. -- -- Since 0.2.0 WPRModifiedRequest :: Request -> ProxyDest -> WaiProxyResponse -- | Respond with the given WAI Application. -- -- Since 0.4.0 WPRApplication :: Application -> WaiProxyResponse data WaiProxySettings -- | The default value for this type. def :: Default a => a wpsOnExc :: WaiProxySettings -> SomeException -> Application wpsTimeout :: WaiProxySettings -> Maybe Int -- | Set the X-Real-IP request header with the client's IP address. -- -- Default: SIHFromSocket -- -- Since 0.2.0 wpsSetIpHeader :: WaiProxySettings -> SetIpHeader -- | Post-process the response body returned from the host. -- -- Since 0.2.1 wpsProcessBody :: WaiProxySettings -> Response () -> Maybe (Conduit ByteString IO (Flush Builder)) -- | Determine if the request should be upgraded to a raw proxy connection, -- as is needed for WebSockets. Requires WAI 2.1 or higher and a WAI -- handler with raw response support (e.g., Warp) to work. -- -- Default: check if the upgrade header is websocket. -- -- Since 0.3.1 wpsUpgradeToRaw :: WaiProxySettings -> Request -> Bool -- | How to set the X-Real-IP request header. -- -- Since 0.2.0 data SetIpHeader -- | Do not set the header SIHNone :: SetIpHeader -- | Set it from the socket's address. SIHFromSocket :: SetIpHeader -- | Set it from either X-Real-IP or X-Forwarded-For, if present SIHFromHeader :: SetIpHeader instance Default WaiProxySettings