Nginx Roteamento de fluxo TCP com base no IP de origem

1

Eu configurei o nginx como um proxy reverso para um fluxo TCP (não-http). Gostaria de aplicar roteamento diferente para um endereço IP de origem específico - isso pode ser feito e como? Estou ciente das recomendações para o módulo http usando a diretiva if , mas isso não parece funcionar para esses fluxos.

Configuração existente:

stream {
  server {
    listen 8000;
    proxy_pass staging;
  }
}

upstream staging {
    server 1.2.3.4:8000;
}

Configuração desejada (não funciona):

stream {
  server {
    listen 8000;
    proxy_pass staging1;
    if ( $remote_addr ~* 4.5.6.7 ) {
        proxy_pass staging2;
    }
  }
}

upstream staging1 {
    server 1.2.3.4:8000;
}
upstream staging2 {
    server 1.2.3.44:8000;
}

Isso dá erro '24314 # 24314: diretiva "if" não é permitida aqui', já que não se aplica ao módulo de fluxo - existe alguma outra funcionalidade como eu poderia alcançar um resultado semelhante?

    
por Peteris 15.03.2016 / 09:01

1 resposta

0

Você pode usar uma diretiva map para esse comportamento. Algo parecido com isto (não testado).

upstream staging1 {
    server 1.2.3.4:8000;
}
upstream staging2 {
    server 1.2.3.44:8000;
}

map $remote_addr $upstream {
    4.5.6.7     staging2;
    default     staging1;
}

stream {
    server {
        listen 8000;
        proxy_pass $upstream;
    }
}
    
por 16.03.2016 / 13:14