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

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
and _STATIC_DIR in candidate.parents
and candidate.is_file()
and candidate.name != "index.html"
):
# Хэшированные ассеты Vite — обычное кэширование (имя меняется при сборке).
return FileResponse(candidate)
return FileResponse(index_file)
# index.html (корень и SPA-маршруты) — НЕ кэшируем: иначе браузер отдаёт старый
# документ из кэша и при недоступности хоста не доходит до Caddy с заглушкой.
return FileResponse(index_file, headers={"Cache-Control": "no-store"})
app = create_app()
+16 -7
View File
@@ -12,12 +12,21 @@
# SSE (/api/events): отдельный handle БЕЗ encode и с flush_interval -1 — иначе сжатие/
# буферизация задержат поток событий (реал-тайм перестанет работать).
#
# Туннель лёг (апстрим недоступен) → reverse_proxy отдаёт 502/503/504, и сниппет
# (offline) подменяет ответ на свою страницу-заглушку (/etc/caddy/maintenance/maintenance.html),
# вместо «зависшей загрузки» SPA. Файл заглушки — deploy/vps/maintenance.html.
# Туннель лёг (апстрим недоступен) → reverse_proxy отдаёт 502/503/504, и сниппет (edge)
# подменяет ответ на страницу-заглушку (/etc/caddy/maintenance/maintenance.html) вместо
# «зависшей загрузки» SPA. Тот же сниппет запрещает кэш HTML-документа (Cache-Control: no-store),
# иначе браузер отдаёт старый index.html из кэша и до Caddy/заглушки запрос не доходит.
# Файл заглушки — deploy/vps/maintenance.html.
# Заглушка «сайт недоступен» при недоступности апстрима. Импортируется в каждый сайт.
(offline) {
# Edge-поведение, общее для сайтов: запрет кэша HTML-документа + заглушка при падении апстрима.
(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 {
@down expression `{http.error.status_code} in [502, 503, 504]`
handle @down {
@@ -43,7 +52,7 @@ forbiddenstars.ru {
encode zstd gzip
reverse_proxy 127.0.0.1:9000
}
import offline
import edge
}
forbidden-stars.ru {
@@ -58,5 +67,5 @@ forbidden-stars.ru {
encode zstd gzip
reverse_proxy 127.0.0.1:9001
}
import offline
import edge
}