Re: error_page & stub не работают вместе

Maxim Dounin mdounin at mdounin.ru
Mon Dec 10 20:55:50 UTC 2012


Hello!

On Mon, Dec 10, 2012 at 09:52:05PM +0400, Maksim Anfilatov wrote:

> Добрый вечер.
> 
> Пример из нашей жизни
> 
> location /ssi_inc/ {
>            memcache_pass ....
>            [получаем из memcache]
>            error_page 404 @ssi_backend;
>            # если нет в memcache пробуем получить с бекенда
> }
> 
> location @ssi_backend {
>           proxy_pass ....
>           [обращаемся на backend]
> }
> 
> В данном случае логичным казалось бы поведение - вставлять stub, если
> произошла ошибка, не указанная в error_page для ssi_inc, либо любая ошибка
> при обращении на backend.

А оно вам надо - чтобы nginx догадывался, что вы хотите считать 
ошибкой (и соответственно использовать stub), а что - нет?

Укажите явно, что в случае 404 следует обращаться на бекенд, и 
ответ трактовать не как тело 404 ошибки, и как полноценный ответ.  
И будет счастье.  Для этого всего лишь надо добавить "=" в 
директиву error_page, т.е. вместо

    error_page 404 @ssi_backend;

написать

    error_page 404 = @ssi_backend;

Подробности можно прочитать тут: http://nginx.org/r/error_page/ru.

> 
> С уважением, Максим Анфилатов.
> 
> 
> 10 декабря 2012 г., 18:46 пользователь Maxim Dounin <mdounin at mdounin.ru>написал:
> 
> > Hello!
> >
> > On Mon, Dec 10, 2012 at 03:16:42PM +0400, Maksim Anfilatov wrote:
> >
> > > Добрый день.
> > >
> > > Наткнулся на неочевидное поведение при совмещении include virtual stub с
> > > error_page в location, обрабатывающем данный include. Простой тестовый
> > > пример.
> > >
> > >         location /ssi_test/ {
> > >                 root /home/woyager/;
> > >                 ssi on;
> > >         }
> > >         location /ssi_inc/ {
> > >                 root /home/woyager/;
> > >                 error_page 404 @ssi_err;
> > >         }
> > >         location @ssi_err {
> > >                 return 200 "error from ssi_err";
> > >         }
> > >
> > > В ssi_test/index.html
> > >
> > > include without stub "<!--# include virtual="/ssi_inc/test.inc" -->" <br>
> > > include with stub <!--# block name="one" -->stub error<!--# endblock -->
> > > "<!--# include virtual="/ssi_inc/test.inc" stub="one" -->" <br>
> > >
> > > На выходе имеем
> > >
> > > include without stub "error from ssi_err"
> > > include with stub "stub error"
> > >
> > > Вроде в обоих случаях должен бы приходить error from ssi_err.
> >
> > Почему?  В обоих случаях при обработке включаемого файла
> > происходит ошибка.  В одной случае она включается как есть, в
> > другом - задан параметр stub, который её перекрывает.
> >
> > --
> > Maxim Dounin
> > http://nginx.com/support.html
> >
> > _______________________________________________
> > nginx-ru mailing list
> > nginx-ru at nginx.org
> > http://mailman.nginx.org/mailman/listinfo/nginx-ru

> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru


-- 
Maxim Dounin
http://nginx.com/support.html



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