# nginx config for production. Phase 0 ships as deliverable; deploy in Phase 6. # # Routes: # / -> hub (Next.js) on :3000 # /live-map/ -> live-map (Vite preview) on :3001 # /api/ -> API (Hono) on :4000 # /ws -> API WebSocket upgrade for /api/v1/live upstream hub { server 127.0.0.1:3000; } upstream map { server 127.0.0.1:3001; } upstream api { server 127.0.0.1:4000; } server { listen 80; server_name _; client_max_body_size 25m; # Hub location / { proxy_pass http://hub; 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_cache_bypass $http_upgrade; } # Live map (mounted under /live-map/ so assets resolve) location /live-map/ { proxy_pass http://map/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } # API + WebSocket location /api/ { proxy_pass http://api; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 86400; # keep WebSockets open } } # Map for WebSocket connection upgrade map $http_upgrade $connection_upgrade { default upgrade; '' close; }