Podemos pular para outro local a partir de um local no nginx? [fechadas]

3

Estou tentando alcançar algo assim:

location /location1/{
    if ($arg_api_key = a_valid_api_key) {
         proxy_pass http://localhost:8080;
    }
    # else jump to location2
}
location /location2/{
    # a lot of validation code here
}

Como fazemos isso no nginx? Ou existe uma maneira melhor de lidar com isso?

    
por Winston Chen 20.05.2013 / 19:36

1 resposta

5

Primeiro, lembre-se de que se é mau e evite colocar qualquer coisa, exceto rewrite ou return dentro de if ; uma solução alternativa sugeria usar error_page e return para alterar a localização usada para processar a solicitação.

Como já foi respondido aqui , a maneira de reutilizar as configurações de localização no nginx é movê-los para um arquivo separado e include desse arquivo em location blocos.

Combinar essas soluções resulta em:

/etc/nginx/validation_code.conf

# a lot of validation code here

config principal

location /location1/ {
    error_page 418 = @proxy;
    recursive_error_pages on;
    if ($arg_api_key = a_valid_api_key) {
        return 418;
    }
    include /etc/nginx/validation_code.conf;
}

location /location2/ {
    include /etc/nginx/validation_code.conf;
}

location @proxy {
    proxy_pass http://localhost:8080;
}

Você também pode pensar em usar um local nomeado para seu código de validação, em vez de criar um arquivo separado; No entanto, você precisará de alguns truques para mudar para esse local nomeado, por exemplo, outro par error_page / return ou algo parecido com

    try_files /nonexistent @validation
    
por 20.05.2013 / 20:39