server { server_name contracts.kube5s.ru; client_max_body_size 100M; location / { proxy_pass http://127.0.0.1:5001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 120s; } location /static/ { proxy_pass http://127.0.0.1:8766; proxy_read_timeout 10s; } location /api/drhider { proxy_pass http://127.0.0.1:8767; proxy_read_timeout 600s; proxy_buffering off; client_max_body_size 50m; add_header Access-Control-Allow-Origin * always; } location = /drhider { alias /var/www/docs/drhider.html; default_type text/html; } location /api/ { proxy_pass http://127.0.0.1:8766; proxy_read_timeout 30s; } location /lucee/ { rewrite ^/lucee/(.*) /$1 break; proxy_pass https://contractor.luceek8s.dev.nubes.ru; proxy_set_header Host contractor.luceek8s.dev.nubes.ru; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 600s; proxy_buffering off; client_max_body_size 100m; } location /convert-doc { proxy_pass http://127.0.0.1:8766; proxy_read_timeout 120s; client_max_body_size 50m; } location /llm-ops { proxy_pass http://127.0.0.1:8766; proxy_read_timeout 130s; } location /process-v2 { proxy_pass http://127.0.0.1:8766; proxy_read_timeout 600s; proxy_buffering off; add_header Access-Control-Allow-Origin "*" always; add_header Access-Control-Allow-Methods "GET, OPTIONS" always; } location /parse-pdf { proxy_pass http://127.0.0.1:8766; proxy_read_timeout 60s; } location /upload { if ($request_method = OPTIONS) { add_header Access-Control-Allow-Origin "*"; add_header Access-Control-Allow-Methods "POST, OPTIONS"; add_header Access-Control-Allow-Headers "*"; add_header Content-Length 0; return 204; } proxy_pass http://127.0.0.1:8766; proxy_read_timeout 300s; client_max_body_size 100m; } location /unzip-upload { if ($request_method = OPTIONS) { add_header Access-Control-Allow-Origin "*"; add_header Access-Control-Allow-Methods "POST, OPTIONS"; add_header Access-Control-Allow-Headers "*"; add_header Content-Length 0; return 204; } proxy_pass http://127.0.0.1:8766; client_max_body_size 100m; } # ── VM-буфер загрузки contracts (паттерн drhider) ────────────── # Браузер кладёт файл сюда PUT (мимо шлюза кластера ~64КБ), бэк тянет сам. # Файлы: /var/www/contracts-upload/ (нужно создать, chown www-data). # CORS: origin фронтенда = contractor.pythonk8s.dev.nubes.ru (ingress, подтверждено). location /contracts-upload/ { alias /var/www/contracts-upload/; dav_methods PUT DELETE; create_full_put_path on; client_max_body_size 1024m; add_header Access-Control-Allow-Origin https://contractor.pythonk8s.dev.nubes.ru always; add_header Access-Control-Allow-Methods 'PUT, GET, OPTIONS, DELETE' always; add_header Access-Control-Allow-Headers 'Content-Type' always; add_header Access-Control-Max-Age 86400 always; if ($request_method = OPTIONS) { return 204; } } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/contracts.kube5s.ru/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/contracts.kube5s.ru/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = contracts.kube5s.ru) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name contracts.kube5s.ru; return 404; # managed by Certbot }