[英]How to log the real IP address when behind a proxy using Scotty / wai
這是我的 scotty 應用程序,請注意我如何將請求記錄到控制台:
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Network.Wai.Middleware.RequestLogger
import Data.Monoid (mconcat)
main = scotty 3000 $ do
--log requests to console
middleware logStdoutDev
get "/:word" $ do
beam <- param "word"
html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]
我的 scotty 應用程序使用代理機制在 nginx 后面運行。 這會導致 scotty 應用程序記錄如下:
127.0.0.1 - - [27/Aug/2014:15:12:00 +0000] "GET / HTTP/1.0" 200 - ...
我希望記錄真實 IP 地址。
我在 Node.js/Express 應用程序中遇到了同樣的問題,我是這樣解決的:
我如何在 Scotty 中解決這個問題?
wai-extra
有一個IPAddrSource
數據類型,它起源於wai-logger
包。 因此,如果您希望 IP 地址來自標頭,看起來您可以執行以下操作:
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Network.Wai.Middleware.RequestLogger
import Control.Monad.IO.Class
import Data.Monoid (mconcat)
import Data.Default
main = scotty 3000 $ do
--log requests to console
logger <- liftIO $ mkRequestLogger def { outputFormat = Apache FromHeader }
middleware logger
get "/:word" $ do
beam <- param "word"
html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]
從描述來看, Apache FromFallback
也將首先檢查標頭,如果找不到標頭,則使用套接字 IP 地址。
您也可以在scotty
函數之外創建記錄器:
main = do
logger <- mkRequestLogger def { outputFormat = Apache FromHeader }
scotty 3000 $ do
middleware logger
get "/:word" $ do
beam <- param "word"
html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.