Nginx Proxy um intervalo de porta grande para porta equivalente em um endereço IP diferente

7

Eu gostaria de usar o nginx para fazer proxy de todo um intervalo (9000-9999) para a mesma porta em um endereço IP diferente. É possível que o nginx se ligue automaticamente a mil portas? Posso fazer isso sem escrever 4000 linhas de configuração nginx?

    
por Collin Anderson 10.06.2011 / 19:45

2 respostas

6

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.

    
por 03.10.2011 / 17:44
5

Aqui está o que acabei fazendo:

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

Dessa forma, você pode simplesmente se conectar ao link ;

    
por 21.01.2015 / 21:05

Tags