¿Podemos saltar a otra ubicación desde una ubicación en nginx?

¿Podemos saltar a otra ubicación desde una ubicación en nginx?

Estoy tratando de lograr algo como esto:

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
}

¿Cómo lo hacemos en nginx? ¿O hay una mejor manera de manejarlo?

Respuesta1

Primero, recuerda quesi es maloy evite poner nada excepto rewriteo returndentro if; Se sugiere una solución alternativa para usar error_pagey returncambiar la ubicación utilizada para procesar la solicitud.

Comoya respondido aquí, la forma de reutilizar la configuración de ubicación en nginx es moverla a un archivo separado y includeese archivo en sus locationbloques.

La combinación de estas soluciones da como resultado:

/etc/nginx/validation_code.conf

# a lot of validation code here

configuración 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;
}

También puede considerar utilizar una ubicación con nombre para su código de validación en lugar de crear un archivo separado; sin embargo, necesitarás algunos trucos para cambiar a esa ubicación con nombre, por ejemplo, otro error_page/ returnpar o algo como

    try_files /nonexistent @validation

información relacionada