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 is public: it can be downloaded before login location /standalone/ { 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 33m; # campaigns up to 32 MB (server/src/main.rs MAX_CAMPAIGN) proxy_read_timeout 15s; } }