У меня есть приложение безопасного стека (приложение подсчета по умолчанию), развернутое как докер-контейнер, работающий на сервере.Я могу управлять сервером, используя 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-адреса с поддоменом.