fix: Cache-Control: no-cache на index.html в web-react и stats-react

location / отдавал index.html вообще без Cache-Control — браузер кэшировал
его эвристически (по Last-Modified), из-за чего после деплоя часть
пользователей продолжала видеть старую версию (например, без анонимного
входа), пока не делали hard refresh, а на следующей обычной загрузке
снова получали закэшированную старую версию. Симптом воспроизвёлся на
test.cloud-copp74.ru.

no-cache вынуждает браузер всегда идти на сервер за index.html (быстрый
304 по ETag, если файл не менялся) — хэшированные /assets/ ниже как
кэшировались на год, так и кэшируются, инвалидация им не нужна.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
jze9
2026-07-16 14:50:22 +05:00
parent eb110f677c
commit 0f13ef5256
2 changed files with 14 additions and 2 deletions

View File

@@ -4,8 +4,13 @@ server {
root /usr/share/nginx/html; root /usr/share/nginx/html;
index index.html; index index.html;
# Статика SPA: всё неизвестное отдаём index.html (клиентский роутинг) # Статика SPA: всё неизвестное отдаём index.html (клиентский роутинг).
# no-cache на index.html — см. web-react/nginx.conf, тот же приём: без
# него браузер кэширует HTML эвристически и после деплоя показывает
# старую версию до hard refresh. Хэшированные /assets/ ниже кэшируются
# честно на год, инвалидация им не нужна — имя меняется при сборке.
location / { location / {
add_header Cache-Control "no-cache";
try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html;
} }

View File

@@ -4,8 +4,15 @@ server {
root /usr/share/nginx/html; root /usr/share/nginx/html;
index index.html; index index.html;
# Статика SPA: всё неизвестное отдаём index.html (клиентский роутинг) # Статика SPA: всё неизвестное отдаём index.html (клиентский роутинг).
# index.html без явного Cache-Control браузер кэширует эвристически (по
# Last-Modified) — после деплоя часть пользователей видит старую версию,
# пока не сделают hard refresh. no-cache вынуждает всегда идти на сервер
# за свежим HTML (быстрый 304 по ETag, если файл не менялся); хэшированные
# /assets/ ниже как кэшировались на год, так и кэшируются — их имя меняется
# при каждой сборке, так что инвалидация не нужна.
location / { location / {
add_header Cache-Control "no-cache";
try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html;
} }