js_import njs/main.js; map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream frontend { server frontend:5173; } upstream backend { server backend:3000; } server { listen 80; set $proxy_target ""; location /api { proxy_pass http://backend; 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; } # Game WebSocket routing location ~/api/room/([^/]+)/socket { set $room_id $1; js_content main.routeWebSocket; } # WebSocket proxy location location @websocket_proxy { 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_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Timeouts proxy_connect_timeout 7m; proxy_send_timeout 7m; proxy_read_timeout 7m; proxy_buffering off; proxy_pass $proxy_target; } location / { proxy_pass http://frontend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }