Как локально запустить веб-приложение Yesod через Nginx? - PullRequest
1 голос
/ 31 мая 2019

На сайте 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.

...