Обработать http статус с backend'а
Igor Sysoev
is at rambler-co.ru
Wed Jun 17 22:03:43 MSD 2009
On Wed, Jun 17, 2009 at 09:36:58PM +0400, Олег Петрачёв wrote:
> День добрый,
>
> >> статусах. Например, при 503 показать специальную страничку nginx'ом, а
> >> при всех остальных спроксировать, что отдал backend.
> > Как раз proxy_intercept_errors и нужно.
> перенаправлять их на обработку nginx'у с помощью директивы error_page.
>
> Ага, спасибо, осознал. Но теперь хочется странного: чтобы эти страницы
> ошибок были видны только при внутренних редиректах. Знаю, что есть
> internal, но он при попытке обратиться к location отдаёт 404. А нужно
> другое: если запрос к странице ошибок вызван внутренним редиректом
> (например, через error_page), то отдавать её, а если не внутренним, то
> проксировать к backend'у.
>
> Если сделать
>
> location / {
> proxy_intercept_errors on;
> error_page 503 /503.html;
> proxy_pass http://127.0.0.1;
> }
>
> location /503.html {
> root /var/www/errors;
> }
>
> то при обращении снаружи к /503.html увидим нашу страницу ошибок, а
> запрос к бэкэнду спроксирован не будет.
>
> Хотелось бы как-нибудь так:
>
> location /503.html {
> if (!$internal) {
> proxy_pass http://127.0.0.1;
> }
> }
>
> Это как-нибудь возможно реализовать? В переменных в документации не
> вижу, за что там можно было бы зацепиться...
location / {
proxy_pass http://127.0.0.1;
proxy_intercept_errors on;
error_page 503 /503.html;
}
location = /503.html {
internal;
error_page 404 = @backend;
}
location @backend {
proxy_pass http://127.0.0.1;
}
--
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list