nginx: /openapi.json перехватывался SPA-фолбэком вместо схемы backend

FastAPI отдаёт /openapi.json на корневом пути (маршруты backend объявлены
с явным префиксом /api/... в декораторах, а не через APIRouter(prefix=)),
поэтому запрос попадал в catch-all location / (раздача index.html фронта)
раньше, чем мог бы дойти до backend — снаружи схема API была недоступна,
что мешало отладке.

Добавлен точный location = /openapi.json, проксирующий на backend:8000
(матчится раньше catch-all за счёт приоритета exact-match в nginx).
This commit is contained in:
2026-07-26 02:57:56 +03:00
parent 9f003756a0
commit 991e5cd756

View File

@@ -156,6 +156,20 @@ server {
return 403; return 403;
} }
# --- Схема OpenAPI: FastAPI отдаёт её на КОРНЕВОМ пути /openapi.json (не
# под /api/ — маршруты backend объявлены с явным префиксом /api/... в
# декораторах, а не через APIRouter(prefix=...), см. backend/main.py),
# поэтому без этого location запрос попадал бы в SPA-фолбэк ниже
# (`location /` отдаёт index.html фронта вместо схемы — мешало отладке).
location = /openapi.json {
set $backend_upstream http://backend:8000;
proxy_pass $backend_upstream;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# --- Медиа (аватары): раздача напрямую из volume, в обход backend. --- # --- Медиа (аватары): раздача напрямую из volume, в обход backend. ---
location /media/ { location /media/ {
alias /media/; alias /media/;