Nginx Proxy把一个大的端口范围转换成不同的ip地址上的等效端口

我想用nginx代理整个范围(9000-9999)到不同的IP地址的同一个端口。 nginx可以自动绑定到一千个端口吗? 我能不能写4000行nginxconfiguration?

这是我最终做的:

server { server_name "~^port(?P<forwarded_port>9\d{3})\.example\.com$"; location / { proxy_pass http://127.0.0.1:$forwarded_port; } } 

这样,你可以简单地连接到http://port9034.example.com ;

你可以用内置的server_portvariables来做到这一点:

 proxy_pass http://backend-host-name:$server_port; 

这将使任何端口的请求来代理到相同的后端端口。

所以你不需要1000个proxy_pass语句。 但是,您可能对listen指令有问题。 它不会接受一系列的端口,所以你需要1000行的格式:

 listen 9000; listen 9001; listen 9002; 

该列表可以通过电子表格轻松生成。 您可能还需要调整nginx允许的文件句柄数来处理这个数目的套接字。 Nginx可以做到,限制可能在OS层。 看到这里和这里 。

我会说,虽然这似乎是一个有问题的devise。 为什么你需要1000个端口? 不会使用主机名或部分URL来区分请求更有意义? 这将更具可扩展性 – 不需要2000个套接字作为基准。