chore(nginx): раздача ассетов сегментации со своего домена
Отдельный `location /mediapipe/` под рантайм MediaPipe: gzip (без него wasm едет все 9 МБ, со сжатием — около трёх) и долгий кэш — файлы неизменны в пределах сборки образа и скачиваются один раз на браузер. Модель (.tflite) из списка gzip исключена намеренно: внутри она уже сжатый архив.
This commit is contained in:
@@ -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 нужен для клиентского роутинга
|
||||
|
||||
Reference in New Issue
Block a user