-- 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.3
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:
--
--
-- - Parse the first request headers.
-- - Ask the supplied function to specify how to reverse proxy.
-- - Open up a connection to the given host/port.
-- - Pass all bytes across the wire unchanged.
--
--
-- 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 via HTTPS.
WPRProxyDestSecure :: 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
-- | Same as WPRModifiedRequest but send to the given destination via
-- HTTPS.
WPRModifiedRequestSecure :: 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
-- | Allow to override proxy settings for each request. If you supply this
-- field it will take precedence over getDest parameter in
-- waiProxyToSettings
--
-- Default: have one global setting
--
-- Since 0.4.2
wpsGetDest :: WaiProxySettings -> Maybe (Request -> IO (LocalWaiProxySettings, WaiProxyResponse))
-- | 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
data LocalWaiProxySettings
-- | Default value for LocalWaiProxySettings, same as def but
-- with a more explicit name.
--
-- Since 0.4.2
defaultLocalWaiProxySettings :: LocalWaiProxySettings
-- | Allows to specify the maximum time allowed for the conection on per
-- request basis.
--
-- Default: no timeouts
--
-- Since 0.4.2
setLpsTimeBound :: Maybe Int -> LocalWaiProxySettings -> LocalWaiProxySettings
instance Data.Default.Class.Default Network.HTTP.ReverseProxy.LocalWaiProxySettings
instance Data.Default.Class.Default Network.HTTP.ReverseProxy.WaiProxySettings