Правка кеширования данных сайта

This commit is contained in:
2026-06-26 23:06:04 +03:00
parent 6d75b4c130
commit f56f9eb47b
2 changed files with 21 additions and 8 deletions
+5 -1
View File
@@ -208,9 +208,13 @@ def _mount_spa(app: FastAPI) -> None:
full_path full_path
and _STATIC_DIR in candidate.parents and _STATIC_DIR in candidate.parents
and candidate.is_file() and candidate.is_file()
and candidate.name != "index.html"
): ):
# Хэшированные ассеты Vite — обычное кэширование (имя меняется при сборке).
return FileResponse(candidate) return FileResponse(candidate)
return FileResponse(index_file) # index.html (корень и SPA-маршруты) — НЕ кэшируем: иначе браузер отдаёт старый
# документ из кэша и при недоступности хоста не доходит до Caddy с заглушкой.
return FileResponse(index_file, headers={"Cache-Control": "no-store"})
app = create_app() app = create_app()
+16 -7
View File
@@ -12,12 +12,21 @@
# SSE (/api/events): отдельный handle БЕЗ encode и с flush_interval -1 — иначе сжатие/ # SSE (/api/events): отдельный handle БЕЗ encode и с flush_interval -1 — иначе сжатие/
# буферизация задержат поток событий (реал-тайм перестанет работать). # буферизация задержат поток событий (реал-тайм перестанет работать).
# #
# Туннель лёг (апстрим недоступен) → reverse_proxy отдаёт 502/503/504, и сниппет # Туннель лёг (апстрим недоступен) → reverse_proxy отдаёт 502/503/504, и сниппет (edge)
# (offline) подменяет ответ на свою страницу-заглушку (/etc/caddy/maintenance/maintenance.html), # подменяет ответ на страницу-заглушку (/etc/caddy/maintenance/maintenance.html) вместо
# вместо «зависшей загрузки» SPA. Файл заглушки — deploy/vps/maintenance.html. # «зависшей загрузки» SPA. Тот же сниппет запрещает кэш HTML-документа (Cache-Control: no-store),
# иначе браузер отдаёт старый index.html из кэша и до Caddy/заглушки запрос не доходит.
# Файл заглушки — deploy/vps/maintenance.html.
# Заглушка «сайт недоступен» при недоступности апстрима. Импортируется в каждый сайт. # Edge-поведение, общее для сайтов: запрет кэша HTML-документа + заглушка при падении апстрима.
(offline) { (edge) {
# HTML-документ (навигации, Accept: text/html) НЕ кэшируем. Иначе браузер отдаёт старый
# SPA из кэша без сетевого запроса → запрос не доходит до Caddy и заглушку не видно.
# Хэшированные ассеты (JS/CSS) под это не попадают (у них другой Accept) и кэшируются как обычно.
@html header Accept *text/html*
header @html Cache-Control "no-store"
# Туннель лёг (апстрим 502/503/504) → отдаём свою страницу-заглушку со статусом 503.
handle_errors { handle_errors {
@down expression `{http.error.status_code} in [502, 503, 504]` @down expression `{http.error.status_code} in [502, 503, 504]`
handle @down { handle @down {
@@ -43,7 +52,7 @@ forbiddenstars.ru {
encode zstd gzip encode zstd gzip
reverse_proxy 127.0.0.1:9000 reverse_proxy 127.0.0.1:9000
} }
import offline import edge
} }
forbidden-stars.ru { forbidden-stars.ru {
@@ -58,5 +67,5 @@ forbidden-stars.ru {
encode zstd gzip encode zstd gzip
reverse_proxy 127.0.0.1:9001 reverse_proxy 127.0.0.1:9001
} }
import offline import edge
} }