me.neoascetic

Редирект на внутренний location в nginx, или 418 Я - чайник

Намедни удосужилось мне использовать этот шуточный HTTP код. Кто бы мог подумать, что ему найдётся реальное применение (пусть и не для приготовления кофе).

Оказывается, не существует иного способа из обычного локэйшна в понятиях nginx передать управление именованному, кроме как приведённый ниже хак. Раньше вроде можно было сделать try_files @location, но у меня nginx ругается на недостаточное количество аргументов директивы try_files. Да и плох данный подход тем что, судя по всему, сперва выполняет файловую операцию.

Итак, хак:

location @root {
    ...
}

location / {
    error_page 418 = @root; return 418; # redirect to @root
}

Да, вот так вот - присваиваем определённому коду ошибки обработчик в виде именованного локэйшна, а затем генерируем ошибку с данным кодом. На форуме советуют использовать именно этот код, т. к. он, вероятно, не пересечётся ни с каким кодом, который может выкинуть приложение, а во-вторых, “наиболее подходит по смыслу”. Лол, что тут ещё сказать? :D