Como uso allow / deny em conjunto com set_real_ip_from?

4

Meu servidor backend nginx deve aceitar apenas solicitações do meu frontend, 1.2.3.4. No entanto, eu também quero que o nginx registre o endereço IP correto, então eu uso set_real_ip_from . Mas ao fazer isso, a regra allow na configuração não é correspondida e o nginx sempre retornará a 403. Aqui está a configuração relevante:

allow  1.2.3.4;
deny  all;

set_real_ip_from  1.2.3.4;
real_ip_heaader  X-Real-IP;

Como posso superar esse problema?

    
por Jay 21.08.2015 / 01:51

1 resposta

2

Eu estava procurando por mim mesmo e como eu demorei um "tempo" para encontrar uma solução, eu colocarei aqui para facilitar para os outros.

permitir / negar construções não funcionarão neste caso, já que elas não funcionam com variáveis ip reais.

Em vez disso, você pode usar a variável $ http_x_forwarded_for :

## this goes before server section
## it allows us to check if forwarded ip is allowed to make request or not
map $http_x_real_ip $allowed {
    default false;

    ## your ip goes here
    ~\s111.111.111.111 true;
    ## other ips you want to allow
}

server {
    ## ... other instructions...

    set_real_ip_from  1.2.3.4;
    real_ip_header  X-Forwarded-For;

    ## you may want to add this to get "truly" real ip
    real_ip_recursive  on;

    ## ... other instructions...

    ## or any other location you need
    location / {
        if ($allowed = false) {
            return 403;
        }
        ## ... other instructions...
    }
}
    
por 03.04.2016 / 19:56