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:
@@ -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/;
|
||||||
|
|||||||
Reference in New Issue
Block a user