Используйте правило прокси-домена для размещения приложения SAFE-Stack, развернутого Docker - PullRequest
0 голосов
/ 29 января 2019

У меня есть приложение безопасного стека (приложение подсчета по умолчанию), развернутое как докер-контейнер, работающий на сервере.Я могу управлять сервером, используя Plesk .С помощью Plesk я могу создать прокси-правила так, чтобы запрос типа: хост / поддомен перенаправлялся на работающий порт контейнера Docker, например, на 8085. Однако запрос, который получает сервер Saturn , работающий в контейнере,не так:

  Request starting HTTP/1.1 GET http://localhost:8085/  
  Sending file. Request path: '/index.html'. Physical path: '/Client/public/index.html'
  Request finished in 0.8357ms 200 text/html

Но:

  Request starting HTTP/1.0 GET http://somedomain.net/sub_domain/  
  Request finished in 110.3886ms 404

И я получаю 404.

Итак, якаким-то образом хочу, чтобы http://somedomain.net/sub_domain был моим «корневым» URL-адресом для моего серверного приложения и чтобы запросы статического файла обрабатывались с помощью этого корневого URL-адреса.

Настройка приложения выглядит следующим образом:

open System.IO
open System.Threading.Tasks

open Microsoft.AspNetCore.Builder
open Microsoft.Extensions.DependencyInjection
open FSharp.Control.Tasks.V2
open Giraffe
open Saturn
open Shared


let tryGetEnv = System.Environment.GetEnvironmentVariable >> function null | "" -> None | x -> Some x

let publicPath =
    Path.GetFullPath "../Client/public"
    |> fun s -> printfn "Using public path: %s" s; s

let port = "SERVER_PORT" |> tryGetEnv |> Option.map uint16 |> Option.defaultValue 8085us

let getInitCounter() : Task<Counter> = task { return { Value = 42 } }

let initHandler =
    fun next ctx ->
            task {
                let! counter = getInitCounter()
                return! json counter next ctx
            }

let webApp = router {
    get "/api/init" initHandler

}

let configureSerialization (services:IServiceCollection) =
    services.AddSingleton<Giraffe.Serialization.Json.IJsonSerializer>(Thoth.Json.Giraffe.ThothSerializer())

let app = application {
    url ("http://0.0.0.0:" + port.ToString() + "/")
    use_router webApp
    memory_cache
    use_static publicPath
    service_config configureSerialization
    use_gzip
}

run app

Как мне это сделать без необходимости жесткого кодирования URL-адреса с поддоменом.

...