js_import njs/main.js; js_set $quiz_room_host main.getQuizRoomHost; map $http_upgrade $connection_upgrade { default upgrade; '' close; } # Cache for room information # keyval_zone zone=rooms:10m; # keyval_zone zone=room_hosts:10m; # keyval $room_id $room_info zone=rooms; upstream frontend { server frontend:5173; } upstream backend { server backend:3000; } server { listen 80; location /api { rewrite /backend/(.*) /$1 break; proxy_pass http://backend; } location /socket.io { rewrite /backend/(.*) /$1 break; proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_hide_header 'Access-Control-Allow-Origin'; } location /quiz/([^/]+)/socket { # Routing logic set $room_id $1; js_content main.routeWebSocket; #Proxy headers 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 3600s; proxy_send_timeout 3600s; proxy_buffering off; } location / { proxy_pass http://frontend; } }