我使用的是最小模板,仅找到更改端口的位置:
main :: IO ()
main = warp 3000 App
但是我不知道在哪里设置其他任何内容。在App
中,路由生成过程中发生了一些神奇的事情,但是没有任何配置的提示。
根据lsof -i
,Yesod正在侦听所有我不想要的接口。我只想将其限制为回送(127.0.0.1)。
我想出了一种变通办法,可以在任何处理程序(路由)的顶部使用它来检查客户端的IP是否匹配:
onlyAllowedFromLocalhost :: Handler ()
onlyAllowedFromLocalhost = do
let allowedIp = "127.0.0.1"
host <- waiRequest <&> W.remoteHost <&> tshow
unless (T.isPrefixOf (allowedIp <> ":") host) $
sendResponseStatus forbidden403 ("Access is allowed only from " <> allowedIp)
有关正确的解决方案,请参见snak的答案
答案 0 :(得分:1)
您可以使用Application
将站点转换为toWaiApp
,而不是使用warp
便捷方法,然后使用runSettings
来运行它。现在,将Settings
配置为使用setHost
仅绑定回送,并将其传递给runSettings
。