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