ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: nginx-ru@xxxxxxxxx <nginx-ru@xxxxxxxxx>
  • Subject: X-Accel-Redirect на 404 после fallback
  • From: Nicholas Kostirya <nick_ik@xxxxxxx>
  • Date: Tue, 19 Mar 2013 09:07:43 +0400
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail; h=Content-Type:Message-ID:Reply-To:Date:Mime-Version:Subject:To:From; bh=venZB8bilXgQ4u6vhd2YikxuVaAjsmCD9KNCF9OMx2I=; b=QZouUtUFeO4SmlVAEtyRPB9ZSWYw8qx5nq31GxrF6QezoSjjvyNtsKjF5hRirsD3g5E4xV+kCDNfaZli+Pm2Pa2HqWS1foC3en4eypnwIbodZ0pAjZVU2P3CvSbO4jbc;

Привет.

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

    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.
Такое ощущение, что если в процессе обработки запроса использовался именованный локайшен, то уже не обычные возврата нет.






_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.