stream { # Map domain names to destinations map $mc_preread_server_name $mcname { example.com mc_RealServer; default $mc_err; } # example of a destination. # The IP is where the actual minecraft server is. upstream mc_RealServer { server 127.0.0.1:25565; } # nginx will listen on port 25565 everywhere server { listen 0.0.0.0:25565; listen [::]:25565; js_preread mcroute.preread; proxy_pass $mcname; } ## internals ## # change the ports/ips if you need multiple instances of this thing for some reason # upstream and server blocks must match! js_import mcroute.js; js_set $mc_preread_server_name mcroute.where; js_set $mc_hout mcroute.handler_out; js_set $mc_stt mcroute.status_type; server { listen 127.0.0.2:65338; js_filter mcroute.unb64; js_access mcroute.err404; return $mc_hout; } server { listen 127.0.0.2:65337; js_filter mcroute.unb64; js_access mcroute.err503; return $mc_hout; } server { listen 127.0.0.2:65336; js_filter mcroute.unb64; js_access mcroute.ponger; return $mc_hout; } server { listen 127.0.0.2:65335; js_filter mcroute.unb64; js_access mcroute.disconner; return $mc_hout; } map $mc_stt $mc_err { "disconnect" mc_disconnecter; "ping" mc_ping; "status" mc_404_status; default error; } upstream mc_404_status { server 127.0.0.2:65338; } upstream mc_ping { server 127.0.0.2:65336; } upstream mc_disconnecter { server 127.0.0.2:65335; } ## /internals ## }