server { access_log /var/log/spq/spq.access.log json_combined; include /etc/nginx/snippets/spq-security.conf; listen 443 ssl; client_max_body_size 50m; server_name grajmedia.duckdns.org graj-media.com shopproquote.graj-media.com; ssl_certificate /etc/letsencrypt/live/grajmedia.duckdns.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/grajmedia.duckdns.org/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; root /mnt/seagate8tb/Websites/ShopProQuote.backup-20260626-2058/spq-v2/dist; index index.html; location / { try_files $uri $uri/ /index.html; } location /pb/ { proxy_pass http://127.0.0.1:8091/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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_read_timeout 86400; proxy_buffering off; } location /api/ { proxy_pass http://127.0.0.1:8091/api/; proxy_http_version 1.1; 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; } location /llm/ { proxy_pass http://127.0.0.1:11434/; proxy_http_version 1.1; proxy_set_header Host "localhost"; proxy_set_header Origin "http://localhost"; proxy_set_header X-Real-IP $remote_addr; proxy_buffering off; proxy_read_timeout 120s; } location /vision/ { proxy_pass http://127.0.0.1:11434/; proxy_http_version 1.1; proxy_set_header Host "localhost"; proxy_set_header Origin "http://localhost"; proxy_set_header X-Real-IP $remote_addr; proxy_buffering off; proxy_read_timeout 300s; } # DeepSeek AI proxy — token validation + key injection include /etc/nginx/snippets/spq-deepseek.conf; # GlitchTip error tracking location /glitchtip/ { rewrite ^/glitchtip/[0-9]+/(api/.*)$ /$1 break; rewrite ^/glitchtip/[0-9]+/(store/.*)$ /api/1/$1 break; rewrite ^/glitchtip/(.*)$ /$1 break; proxy_pass http://127.0.0.1:8001; proxy_http_version 1.1; 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_buffering off; } # GlitchTip bare project-ID path (Sentry DSN compat) location ~ ^/([0-9]+)/(api|store)/(.*)$ { rewrite ^/([0-9]+)/api/(.*)$ /api/$1/$2 break; rewrite ^/([0-9]+)/store/(.*)$ /api/$1/$2 break; proxy_pass http://127.0.0.1:8001; proxy_http_version 1.1; 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_buffering off; } }