Você pode fazer isso com a variável server_port integrada:
proxy_pass http://backend-host-name:$server_port;
Isso faria com que a porta em que a solicitação chegasse fosse colocada em proxy na mesma porta de back-end.
Então você não precisa de 1000 declarações proxy_pass. Porém, você pode ter um problema com a diretiva listen . Ele não aceita um intervalo de portas, portanto você precisará de 1000 linhas do formulário:
listen 9000;
listen 9001;
listen 9002;
Essa lista pode ser facilmente gerada com uma planilha. Você provavelmente também precisará ajustar o número de identificadores de arquivo permitidos pelo nginx para manipular esse número de soquetes. Nginx pode fazê-lo, os limites podem estar na camada do sistema operacional. Consulte aqui e aqui .
Eu vou dizer, embora isso pareça ser um projeto problemático. Por que você precisa de 1000 portas? Não seria melhor usar nomes de host ou alguma parte da URL para diferenciar solicitações? Seria muito mais escalável - não há necessidade de 2000 soquetes como linha de base.