当使用warp运行 run 应用程序时,它将监听所有IP地址。

出于安全原因,我只想听localhost,使用反向代理处理远程访问。

我该如何调用run仅在特定主机/IP上监听?

注意:由于回答了“问答式”,因此该问题有意表明没有进行任何研究。

最佳答案

当前接受的答案因导管和/或翘曲的变化而中断。 Warp不再导出Host构造函数。但是您不需要它,因为HostPreference类型支持OverloadedStrings扩展,因此您可以直接使用字符串。

此示例还通过切换到setPortsetHost消除了过时警告。

{-# LANGUAGE OverloadedStrings #-}

import Network.Wai (responseLBS)
import Network.Wai.Handler.Warp
import Network.HTTP.Types (status200)
import Network.HTTP.Types.Header (hContentType)

main = do
    let port = 3000
    putStrLn $ "Listening on port " ++ show port
    let settings = setPort port $ setHost "127.0.0.1" defaultSettings
    runSettings settings app

app req = return $
    responseLBS status200 [(hContentType, "text/plain")] "Hello world!"

关于haskell - 使用warp监听特定主机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22620622/

10-11 07:34