chore(nginx): раздача ассетов сегментации со своего домена

Отдельный `location /mediapipe/` под рантайм MediaPipe: gzip (без него wasm
едет все 9 МБ, со сжатием — около трёх) и долгий кэш — файлы неизменны в
пределах сборки образа и скачиваются один раз на браузер. Модель (.tflite)
из списка gzip исключена намеренно: внутри она уже сжатый архив.
This commit is contained in:
2026-08-10 08:59:58 +03:00
parent 17437880b1
commit b0e30ead57

View File

@@ -170,12 +170,33 @@ server {
proxy_set_header X-Forwarded-Proto $scheme;
}
# --- Медиа (аватары): раздача напрямую из volume, в обход backend. ---
# --- Медиа (аватары, картинки фона): раздача напрямую из volume, в обход backend. ---
location /media/ {
alias /media/;
autoindex off;
}
# --- Рантайм MediaPipe для замены фона видео (сессия 35) ---
# Ассеты сегментации (wasm-рантайм ~9 МБ + модель ~250 КБ) отдаются СО
# СВОЕГО домена, а не с внешних CDN: VidConf ставят в закрытых контурах,
# где jsdelivr и storage.googleapis.com недоступны, и там фича молча не
# работала бы (см. frontend/src/lib/virtualBackground.ts).
#
# gzip именно здесь, а не на весь сервер: без сжатия wasm едет все 9 МБ,
# со сжатием — около 3. Файлы неизменны в пределах сборки образа и
# скачиваются один раз на браузер, поэтому кэшируются надолго.
location /mediapipe/ {
root /usr/share/nginx/html;
gzip on;
# Модель (.tflite) в список не входит намеренно: внутри она уже
# сжатый архив, gzip дал бы 0% выигрыша за полную цену по CPU.
gzip_types application/wasm application/javascript;
gzip_min_length 1024;
gzip_proxied any;
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
# --- Frontend SPA (React + Vite): статика вкомпилирована в образ nginx
# (frontend/Dockerfile) в /usr/share/nginx/html. `try_files` с
# history-fallback на /index.html нужен для клиентского роутинга