I just recently had some similar problems…
So first make sure your nginx is build with stream.
My conig is this:
#TS server main port
server {
listen 9999 udp;
listen [::]:9999 udp;
proxy_pass ts3_stream_backend;
proxy_timeout 60s; #not needed
}
upstream ts3_stream_backend {
server censored:6653;
server 127.0.0.1:9987 backup;
}
#TS server file port
server {
listen 30033;
proxy_pass ts3_stream_files;
}
upstream ts3_stream_files {
server censored:30033;
server 127.0.0.1:30032 backup;
}
I use this to provide a fallback server if the censored one is unreachable for some reason.
I’m not sure if this is indeed enough for you, as your problem seems to be a lot more sophisticated than just a basic reverse proxy.
Also make sure the given config is part of the stream
directive.