Можно ли перейти из одного места в другое в nginx?

Можно ли перейти из одного места в другое в nginx?

Я пытаюсь добиться чего-то вроде этого:

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
}

Как это сделать в nginx? Или есть способ лучше?

решение1

Во-первых, помните, чтоесли это злои избегайте размещения чего-либо, кроме rewriteили returnвнутри if; предлагается обходной путь — использовать error_pageи returnизменить местоположение, используемое для обработки запроса.

Какуже ответили здесь, способ повторного использования настроек местоположения в nginx — это переместить их в отдельный файл и добавить includeэтот файл в ваши locationблоки.

Объединение этих решений приводит к:

/etc/nginx/validation_code.conf

# a lot of validation code here

основная конфигурация

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;
}

Вы также можете подумать об использовании именованного расположения для кода проверки вместо создания отдельного файла; однако вам понадобятся некоторые трюки, чтобы переключиться на это именованное расположение — например, еще одна пара error_page/ returnили что-то вроде

    try_files /nonexistent @validation

Связанный контент