当使用warp运行 run
应用程序时,它将监听所有IP地址。
出于安全原因,我只想听localhost
,使用反向代理处理远程访问。
我该如何调用run
仅在特定主机/IP上监听?
注意:由于回答了“问答式”,因此该问题有意表明没有进行任何研究。
最佳答案
当前接受的答案因导管和/或翘曲的变化而中断。 Warp不再导出Host
构造函数。但是您不需要它,因为HostPreference
类型支持OverloadedStrings扩展,因此您可以直接使用字符串。
此示例还通过切换到setPort
和setHost
消除了过时警告。
{-# 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/