Re: Проблема при использовании return и кастомных ошибок на уровне server

Maxim Dounin mdounin на mdounin.ru
Чт Мар 22 14:27:43 UTC 2018


Hello!

On Thu, Mar 22, 2018 at 05:03:01PM +0300, Aziz Rozyev wrote:

> если есть возможность привязаться к к/л стандартной ошибке, например, для 404:
>  
> error_page 404 =527 /plugin.html
> 
> а так в nginx кажется не предусмотрена ошибка 527.

Это не важно.  Важно то, что при обработке внетреннего 
перенаправления перенаправления на /plug.html в соответствии с 
директивой error_page - будут выполнены инструкции модуля rewrite, 
написанные на уровне server{}:

> > error_page 527 /plug.html;
> > return 527;

То есть снова случится return 527.  Поскольку мы уже в процессе 
обработки ошибки - то nginx не будет пытаться снова куда-то 
перенаправить запрос в соответствии с директивой error_page, а 
вернёт стандартную ошибку.

> > Как вернуть кастомную ошибку на уровне сервера?

Попытка вернуть ошибку с собственным телом ответа с помощью 
безусловного "return 527" на уровне server - обречена не неудачу, 
потому что nginx не сможет это тело ответа вернуть.  Проще всего 
делать return в location'е, отдельном от того, в котором 
собственно возвращается тело:

    error_page 527 /plug.html;

    location / {
        return 527;
    }

    location = /plug.html {
        # no return here
    }

Можно также пытаться сделать return на уровне server{} условно, но 
смысла в этом обычно нет, использовать location'ы - проще и 
правильнее.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru