Files
idoklad/documentation/reverse-proxy-swagger.md
T
2026-06-15 10:05:15 +02:00

1.7 KiB

Reverse proxy a Swagger (ROOT_PATH)

Tato služba běží v AppFactory za reverzní proxy (Caddy) na veřejné cestě:

https://services.csbot.cz/apps/idoklad

Jak Caddy předává requesty

Caddy používá handle_path, který prefix /apps/idoklad odstraní dříve, než request dorazí do containeru. Container tedy přijímá routy bez prefixu:

veřejně:   GET /apps/idoklad/contacts
container: GET /contacts

Důsledek: HttpRequest.PathBase je uvnitř containeru prázdný, protože příchozí cesta už prefix neobsahuje. Nelze z něj proto odvodit veřejnou cestu pro OpenAPI.

Konfigurace v Program.cs

  • ROOT_PATH (env, např. /apps/idoklad) je jediný spolehlivý zdroj veřejného prefixu.
  • Z ROOT_PATH se sestaví publicPrefix (normalizovaný, s úvodním lomítkem).
  • UsePathBase(publicPrefix) je za handle_path no-op, ale ponechán pro případ proxy, která prefix nestrhává (handle), aby routy stále seděly.
  • OpenAPI servers[0].url se v PreSerializeFilters nastaví na publicPrefix (fallback na PathBase, nakonec / pro lokální běh).

Díky tomu Swagger UI „Try it out" volá …/apps/idoklad/<endpoint>, ne kořen domény.

Ověření

Kontrola Lokálně (bez ROOT_PATH) S ROOT_PATH=/apps/idoklad
GET /health 200 200
GET /docs (Swagger UI) 200 200
GET /docs/v1/swagger.json 200 200
servers[0].url v OpenAPI / /apps/idoklad

Veřejně po deploy ověř:

GET https://services.csbot.cz/apps/idoklad/health
GET https://services.csbot.cz/apps/idoklad/docs

a ve Swagger UI, že „Try it out" cílí na https://services.csbot.cz/apps/idoklad/<endpoint>.