使用warp收听特定主机

Uli*_*ler 6 haskell haskell-warp

使用时运行warp应用程序时run,它会侦听所有IP地址.

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

如何调用run仅侦听特定主机/ IP?

注意:这个问题故意没有研究,因为它回答了Q&A-Style.

Ed4*_*Ed4 6

当前接受的答案因管道和/或翘曲的变化而被打破.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!"
Run Code Online (Sandbox Code Playgroud)