我想用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个套接字作为基准。