nginx 反向代理取决于请求的端口

nginx reverse proxy depends on requested port

我想监听一个范围的端口,并绑定增量值(10000)的反向代理。

例如,我想监听并将其绑定到以下值:

example.com:20000 -> http://0.0.0.0:30000
example.com:20010 -> http://0.0.0.0:30010
example.com:20200 -> http://0.0.0.0:30200

我的 nxing 配置文件:

server {
  listen        20000-20200;
  server_name   example.com;
  
  location / {
    proxy_pass  http://0.0.0.0:$server_port; ## << I want increment this port with 10000
  }
}

我该怎么做?

哇,我不知道 nginx 允许监听端口范围。我在documentation中没有找到,但是我自己查看的时候确实是按预期工作的。

好了,回到问题。没有额外的模块 nginx 没有任何内置的数学。但是,由于您只需要替换一位数字,您可以通过正则表达式捕获组和字符串连接来完成:

map $server_port $port {
    "~\d(\d{4})"    3;
}
server {
    listen          20000-20200;
    server_name     example.com;
    location / {
        proxy_pass  http://0.0.0.0:$port;
    }
}

如果您使用 OpenResty (or build nginx yourself with lua-nginx-module),您可以在 nginx 配置中使用 LUA 代码的真实数学:

server {
    listen          20000-20200;
    server_name     example.com;
    location / {
        set_by_lua_block $port { return ngx.var.server_port + 10000 }
        proxy_pass  http://0.0.0.0:$port;
    }
}