Слушай на конкретном хосте используя warp
При запуске приложения деформации с помощью run
Слушает на всех IP-адресах.
Из соображений безопасности я хочу слушать localhost
только обработка удаленного доступа с использованием обратного прокси.
Как мне нужно позвонить run
слушать только на определенном хосте /IP?
Примечание. Этот вопрос намеренно не требует каких-либо исследований, так как на него был дан ответ на вопросы.
2 ответа
В настоящее время принятый ответ был нарушен из-за изменений в канале и / или деформации. Деформация больше не экспортирует 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
Сам не может этого сделать. вам нужно использовать runSettings
:
Settings
параметр, который вы хотите передать, содержит информацию о хостах, которые он прослушивает.
Соответствующий тип здесь HostPreference
, Хотя он позволяет указывать разные шаблоны, в том числе IPv6Only
мы будем использовать Host
Конструктор здесь.
Основываясь на этом ответе, я покажу минимальный пример для прослушивания только на localhost.
Обратите внимание, что аксессоры любят settingsHost
помечены как устаревшие, но официальная документация для деформации 2.1.2.1 по-прежнему показывает пример использования settingsTimeout
здесь
{-# 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!"