Назад | Перейти на главную страницу

Можем ли мы перейти в другое место из места в 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? Или есть лучший способ справиться с этим?

Во-первых, помните, что если зло и избегайте ничего, кроме 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