location /ssi_inc/ { memcache_pass .... [получаем из memcache] error_page 404 @ssi_backend; # если нет в memcache пробуем получить с бекенда
}
location @ssi_backend { proxy_pass .... [обращаемся на backend] }
В данном случае логичным казалось бы поведение - вставлять stub, если произошла ошибка, не указанная в error_page для ssi_inc, либо любая ошибка при обращении на backend.
С уважением, Максим Анфилатов.
10 декабря 2012 г., 18:46 пользователь Maxim Dounin <mdounin@xxxxxxxxxx> написал:
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