diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -3,3 +3,7 @@
 ## 0.1.0.0 -- 2018-07-28
 
 * Initial version.
+
+## 0.1.1.0 -- 2018-08-06
+
+* Add configuration for the number of redirects
diff --git a/src/Network/Wai/Middleware/Delegate.hs b/src/Network/Wai/Middleware/Delegate.hs
--- a/src/Network/Wai/Middleware/Delegate.hs
+++ b/src/Network/Wai/Middleware/Delegate.hs
@@ -2,7 +2,8 @@
 {-|
 Module      : Network.Wai.Middleware.Delegate
 Description :
-  Provides a Wai middleware that delegates handling of requests.
+  Provides a Wai middleware1
+that delegates handling of requests.
 
   - delegateTo: delegates handling of requests matching a predicate to a
     delegate Application
@@ -87,6 +88,8 @@
   , proxyTimeout     :: Int
     -- | The host being proxied
   , proxyHost        :: BS.ByteString
+    -- | The number of redirects to follow. 0 means none, which is the default.
+  , proxyRedirectCount    :: Int
   }
 
 instance Default ProxySettings where
@@ -98,6 +101,7 @@
       -- default to 15 seconds
     , proxyTimeout = 15
     , proxyHost = "localhost"
+    , proxyRedirectCount = 0
     }
     where
       onException :: SomeException -> Wai.Response
@@ -135,7 +139,7 @@
               { method = Wai.requestMethod req
               , requestHeaders = addHostHeader $ filter dropUpstreamHeaders $ Wai.requestHeaders req
                 -- always pass redirects back to the client.
-              , redirectCount = 0
+              , redirectCount = proxyRedirectCount settings
               , requestBody =
                   case Wai.requestBodyLength req of
                     Wai.ChunkedBody ->
diff --git a/test/IntegrationTest.hs b/test/IntegrationTest.hs
--- a/test/IntegrationTest.hs
+++ b/test/IntegrationTest.hs
@@ -24,6 +24,7 @@
 import           Test.HttpReply
 import           Test.TestRequests               (RequestBuilder (..),
                                                   buildRequest,
+                                                  testOverRedirectedRequests,
                                                   testNotProxiedRequests,
                                                   testRequests)
 import           Test.WithExtras                 (defaultTlsSettings,
@@ -32,13 +33,19 @@
 defaultTestSettings :: ProxySettings
 defaultTestSettings = def { proxyHost = "httpbin.org", proxyTimeout = 2 }
 
+redirectTestSettings :: ProxySettings
+redirectTestSettings = defaultTestSettings { proxyRedirectCount = 2 }
+
 main :: IO ()
 main = do
   dumpDebug' <- lookupEnv "DEBUG"
   let dumpDebug = maybe False (const True) dumpDebug'
   hspec $ do
+    insecureRedirectTest dumpDebug
     insecureProxyTest dumpDebug
+    insecureNotProxiedTest dumpDebug
     secureProxyTest dumpDebug
+    secureNotProxiedTest dumpDebug
 
 defaultTestDelegate :: ProxySettings -> IO Application
 defaultTestDelegate s = do
@@ -52,6 +59,9 @@
 testWithInsecureProxy :: (Port -> IO ()) -> IO ()
 testWithInsecureProxy = testWithApplication (defaultTestDelegate defaultTestSettings)
 
+testWithInsecureRedirects :: (Port -> IO ()) -> IO ()
+testWithInsecureRedirects = testWithApplication (defaultTestDelegate redirectTestSettings)
+
 testWithSecureProxy :: (Port -> IO ()) -> IO ()
 testWithSecureProxy = testWithTLSApplication defaultTlsSettings (defaultTestDelegate defaultTestSettings)
 
@@ -81,18 +91,47 @@
     print proxied
   f direct proxied
 
+insecureNotProxiedTest :: Bool -> Spec
+insecureNotProxiedTest debug =
+  let scheme = "HTTP"
+      desc = "Proxy on " ++ scheme ++ " should fail"
+      assertNeq = onDirectAndProxy assertHttpRepliesDiffer debug
+  in
+    around testWithInsecureProxy $ describe desc $ do
+    for_ testNotProxiedRequests $ \(title, modifier) ->
+      it (scheme ++ " " ++ title) $ \port -> assertNeq port $ modifier def
+
+insecureRedirectTest :: Bool -> Spec
+insecureRedirectTest debug =
+  let scheme = "HTTP"
+      desc = "Proxy over " ++ scheme ++ " with too many redirects differs"
+      assertNeq = onDirectAndProxy assertHttpRepliesDiffer debug
+  in
+    around testWithInsecureRedirects $ describe desc $ do
+    for_ testOverRedirectedRequests $ \(title, modifier) ->
+      it (scheme ++ " " ++ title) $ \port -> assertNeq port $ modifier def
+
 insecureProxyTest :: Bool -> Spec
 insecureProxyTest debug =
   let scheme = "HTTP"
       desc = "Simple " ++ scheme ++ " proxying:"
       assertEq = onDirectAndProxy assertHttpRepliesAreEq debug
-      assertNeq = onDirectAndProxy assertHttpRepliesDiffer debug
   in
     around testWithInsecureProxy $ describe desc $ do
     for_ testRequests $ \(title, modifier) ->
       it (scheme ++ " " ++ title) $ \port -> assertEq port $ modifier def
+
+secureNotProxiedTest :: Bool -> Spec
+secureNotProxiedTest debug =
+  let
+    scheme = "HTTPS"
+    desc = "Proxy on " ++ scheme ++ " should fail"
+    assertNeq = onDirectAndProxy assertHttpRepliesDiffer debug
+    def' = def { rbSecure = True }
+  in
+    around testWithSecureProxy $ describe desc $ do
     for_ testNotProxiedRequests $ \(title, modifier) ->
-      it (scheme ++ " " ++ title) $ \port -> assertNeq port $ modifier def
+      it (scheme ++ " " ++ title) $ \port -> assertNeq port $ modifier def'
 
 secureProxyTest :: Bool -> Spec
 secureProxyTest debug =
@@ -100,11 +139,8 @@
     scheme = "HTTPS"
     desc = "Simple " ++ scheme ++ " proxying:"
     assertEq = onDirectAndProxy assertHttpRepliesAreEq debug
-    assertNeq = onDirectAndProxy assertHttpRepliesDiffer debug
     def' = def { rbSecure = True }
   in
     around testWithSecureProxy $ describe desc $ do
     for_ testRequests $ \(title, modifier) ->
       it (scheme ++ " " ++ title) $ \port -> assertEq port $ modifier def'
-    for_ testNotProxiedRequests $ \(title, modifier) ->
-      it (scheme ++ " " ++ title) $ \port -> assertNeq port $ modifier def'
diff --git a/test/Test/TestRequests.hs b/test/Test/TestRequests.hs
--- a/test/Test/TestRequests.hs
+++ b/test/Test/TestRequests.hs
@@ -8,6 +8,7 @@
     , testGetRequests
     , testPostRequests
     , testNotProxiedRequests
+    , testOverRedirectedRequests
     ) where
 
 import qualified Data.ByteString       as BS
@@ -49,6 +50,8 @@
     , (\builder -> builder {rbPath = "/get"}))
   , ("GET (with a query)"
     , (\builder -> builder {rbPath = "/get?a=10&b=whatever"}))
+  , ("GET (multiple redirects)"
+    , (\builder -> builder {rbPath = "/redirect/3"}))
   , ("GET (with a body)"
     , (\builder -> builder
         { rbPath = "/get"
@@ -64,6 +67,12 @@
 testNotProxiedRequests =
   [ ("GET (funny resource - differs on proxy)"
     , (\builder -> builder {rbPath = "/status/418"}))
+  ]
+
+testOverRedirectedRequests :: [(String, RequestBuilder -> RequestBuilder)]
+testOverRedirectedRequests =
+  [ ("GET (multiple redirects)"
+    , (\builder -> builder {rbPath = "/redirect/3"}))
   ]
 
 testPostRequests :: [(String, RequestBuilder -> RequestBuilder)]
diff --git a/wai-middleware-delegate.cabal b/wai-middleware-delegate.cabal
--- a/wai-middleware-delegate.cabal
+++ b/wai-middleware-delegate.cabal
@@ -1,5 +1,5 @@
 name:               wai-middleware-delegate
-version:            0.1.0.0
+version:            0.1.1.0
 synopsis:           WAI middleware that delegates handling of requests.
 description:        WAI middleware to intercept requests that match a predicate and
                     respond to them using other WAI Applications or proxied hosts. [WAI]
