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

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

Estou tentando conseguir 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?

Responder1

Primeiro, lembre-se dissose é maue evite colocar qualquer coisa exceto rewriteou returndentro if; uma solução alternativa sugerida é usar error_pagee returnalterar o local usado para processar a solicitação.

Comojá respondi aqui, a maneira de reutilizar as configurações de localização no nginx é movê-las para um arquivo separado e includeesse arquivo em seus locationblocos.

A combinação dessas soluções resulta em:

/etc/nginx/validation_code.conf

# a lot of validation code here

configuração 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/ returnou algo parecido

    try_files /nonexistent @validation

informação relacionada