server {
listen 80;
root /usr/share/nginx/html;
index index.html;
# Вложения — до 10 МБ на файл (лимит бэка) + запас на multipart-конверт
client_max_body_size 20m;
# kit.css/phosphor ~4 МБ текстовых ассетов — сжимаем
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
gzip_min_length 1024;
# SPA: любой маршрут отдаёт index.html
location / {
try_files $uri $uri/ /index.html;
}
# Хэшированная статика (Vite + ассеты кита) — кэш на год
location /assets/ {
try_files $uri =404;
expires 1y;
add_header Cache-Control "public, immutable";
}
# SSO-флоу gnexus-gauth проходит через backend
location /auth/ {
proxy_pass http://api:8134;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# MCP для ИИ-агентов: streamable HTTP (SSE) — без буферизации
location /mcp/ {
proxy_pass http://api:8134;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_read_timeout 3600s;
}
# API: /api/events — долгоживущий SSE (ping каждые 20 с), стрим без буферизации
location /api/ {
proxy_pass http://api:8134;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_read_timeout 300s;
}
}