我在我的服务器上运行游戏。 当用户请求时,我的服务器上的新进程将启动,并开始在8001-8100范围内的随机端口上侦听websocket连接。
在客户端我想连接到游戏。
var port = 8044; // <- Client is given this number when creating a new game
connection = new WebSocket("wss://XXX/websocket?port=" + port);
我的服务器是nginx反向代理。我想做这样的事情: (我需要一个有效的替代品,下面应说明这一点。)
server {
...
location /websocket/ {
if(isNumber($port) && $port <= 8100 && $port >= 8001 {
proxy_pass http://localhost:$port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
} }
这些反向代理恶作剧的原因是能够使用默认的443端口,这意味着客户端不会遇到防火墙问题。 Othwerwise我只是直接从客户端连接到正确的端口。
有什么想法吗?
答案 0 :(得分:1)
port
参数以$arg_port
的形式提供。可以使用正则表达式检查它。例如:
location /websocket/ {
if ($arg_port !~ "^80[0-9]{2}$") {
return 403;
}
proxy_pass http://localhost:$arg_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
具有端口范围的小诗意许可,但更复杂的表达可以达到您的精确要求。我避免在these reasons的if
块中放置太复杂的内容。
有关详情,请参阅this document。