На сайте Yesod у меня есть следующее (отрывок):
staticFiles "assets/"
newtype App = App
{ appStatic :: Static
}
instance Yesod App where
approot = ApprootStatic "http://localhost:9000/yello"
main :: IO ()
main = do
appStatic <- static "assets"
warp 9000 $ App appStatic
Итак, я заявляю, что мое маленькое веб-приложение будет размещено с префиксом yello
.
Теперь я хочу запустить это на Nginx ... но не могу правильно настроить: (
У меня есть следующее nginx.conf
:
daemon off;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
location /yello/ {
proxy_pass http://localhost:9000/;
}
#location /assets {
# root /Users/nrm/Learning/Haskell/web/yesod/yello;
# expires max;
#}
}
}
Мой локальный исходный код находится на /Users/nrm/Learning/Haskell/web/yesod/yello
, поэтому я сначала запускаю yello
, а затем запускаю nginx
:
В терминале 1:
[/Users/nrm/Learning/Haskell/web/yesod/yello]
$ stack build
$ stack exec -- yello
В Терминале 2:
[/usr/local/etc/nginx]
$ nginx
Затем в браузере я ввожу localhost/yello
, и в результате получается
Not Found
/yelloyello/yello
и URL в адресной строке изменился на http://localhost/yelloyello/yello
.
Что мне здесь не хватает?
Обновление0 : упрощенное nginx.conf
в соответствии с https://serverfault.com/questions/379675/nginx-reverse-proxy-url-rewrite. По-прежнему не работает: (
Update1 : со следующими конфигурациями он работает (примечание, без префикса в approot
!):
staticFiles "assets/"
newtype App = App
{ appStatic :: Static
}
instance Yesod App where
approot = ApprootStatic "http://localhost:9000"
main :: IO ()
main = do
appStatic <- static "assets"
warp 9000 $ App appStatic
nginx.conf
daemon off;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
location /yello/ {
proxy_pass http://localhost:9000/;
}
}
}
В Терминале 1:
[/Users/nrm/Learning/Haskell/web/yesod/yello]
$ stack build
$ stack exec -- yello
В терминале 2:
[/usr/local/etc/nginx]
$ nginx
Затем в браузере введите http://localhost/yello
.