我使用的是一个最小的模板,只找到了更改端口的位置:
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 的答案
您可以使用toWaiApp
将站点转换为Application
,然后使用runSettings
运行它,而不是使用warp
方便的方法。现在,将Settings
配置为使用setHost
仅绑定环回,并将其传递给runSettings
。