Используйте правило прокси-домена для размещения приложения SAFE-Stack, развернутого Docker
У меня есть приложение безопасного стека (приложение подсчета по умолчанию), развернутое как докер-контейнер, работающий на сервере. Я могу управлять сервером с помощью Plesk. С помощью Plesk я могу создавать прокси-правила так, чтобы запрос, такой как: host/subdomain, перенаправлялся на работающий порт контейнера 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 с поддоменом.