首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用warp监听特定主机

使用warp监听特定主机
EN

Stack Overflow用户
提问于 2014-03-24 21:07:27
回答 2查看 963关注 0票数 6

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

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

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

注意:这个问题没有表现出任何研究的努力,因为它被回答了问答式.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 20:11:10

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

此示例还通过切换到setPortsetHost来消除弃用警告。

代码语言:javascript
复制
{-# 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!"
票数 6
EN

Stack Overflow用户

发布于 2014-03-24 21:07:27

run本身无法做到这一点。您需要使用runSettings

要传递它的Settings参数包含有关它侦听的主机的信息。

这里的相关类型是HostPreference。虽然它允许您指定不同的通配符,包括IPv6Only,但是这里我们将使用Host构造函数。

基于这个答案,我将展示一个只在localhost上侦听的最小示例。

请注意,像settingsHost这样的访问器被标记为弃用,但是warp2.1.2.1的官方文档仍然显示了一个使用settingsTimeout 这里的示例。

代码语言:javascript
复制
{-# 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 = defaultSettings { settingsPort = port,
                                     settingsHost = Host "127.0.0.1" }
    runSettings settings app

app req = return $
    responseLBS status200 [(hContentType, "text/plain")] "Hello world!" 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22620622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档