Newer
Older
gnexus-tasks / frontend / nginx.conf
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;
    }
}