server { listen 80; root /usr/share/nginx/html; index index.html; # test build: always reload fresh files add_header Cache-Control "no-cache"; location / { try_files $uri $uri/ =404; } # installable app (PWA) location ~ \.webmanifest$ { default_type application/manifest+json; try_files $uri =404; } # the standalone file only for logged-in users (checked by the service) location /standalone/ { auth_request /api/auth; try_files $uri =404; } # savegame service (server/). Resolved at request time, so the game still starts without it; # the game then falls back to savegame files. # match relay WebSocket (server/src/netplay.rs) location /api/netplay/ws { resolver 127.0.0.11 valid=10s ipv6=off; set $saves http://saves:8080; proxy_pass $saves; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 3600s; proxy_send_timeout 3600s; } location /api/ { resolver 127.0.0.11 valid=10s ipv6=off; set $saves http://saves:8080; proxy_pass $saves; client_max_body_size 2m; proxy_read_timeout 15s; } }