X-Accel-Redirect на 404 после fallback

Nicholas Kostirya nick_ik at mail.ru
Tue Mar 19 05:07:43 UTC 2013


 Привет.

Есть такая конфигурация.

    location / {
        proxy_pass  http://0:5000;
    }

    location = /404 {
        root /tmp/nginx;
        error_page 404 /404.html;
        return 404;
    }

    location ~* \.(html)$ {
        root /tmp/nginx;
        error_page 404 /404.html;
    }

Бекенд возвращает ответ с "X-Accel-Redirect: /404".
/404 каталога нет и срабатывает error_page 404 и возвращается /404.html страница с 404 HTTP статусом.

Теперь добавим впереди memcached:

    location / {
        set $memcached_key "test:$uri";
        memcached_pass unix:/tmp/memcached.sock;
        default_type text/html;
        error_page 404 = @fallback;
    }

    location @fallback {
        proxy_pass  http://0:5000;
    }

    location = /404 {
        root /tmp/nginx;
        error_page 404 /404.html;
        return 404;
    }

    location ~* \.(html)$ {
        root /tmp/nginx;
        error_page 404 /404.html;
    }

И в такой конфигурации, когда бекенд возвращает ответ с "X-Accel-Redirect: /404",
то nginx отдает не /404.html страницу, а свою внутреннюю.

Если же делать сразу "X-Accel-Redirect: /404.html", то не будет 404 статуса.

Какое есть решение для этой ситуации?

Кстати, вызов memcached можно даже убрать, достаточно оставить цепочку из двух error_page.
Такое ощущение, что если в процессе обработки запроса использовался именованный локайшен, то уже не обычные возврата нет.



----------------------------------------------------------------------

----------------------------------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20130319/364aa852/attachment-0001.html>


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