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