<HTML><BODY>Привет.<br><div><div id="style_13636621800000000456"><div id="style_13636621800000000456_BODY"><div><div id="style_13636620790000000207"><div id="style_13636620790000000207_BODY"><br>Есть такая конфигурация.<br><br> location / {<br> proxy_pass <a href="http://0:5000;" target="_blank">http://0:5000;</a><br> }<br><br> location = /404 {<br> root /tmp/nginx;<br> error_page 404 /404.html;<br> return 404;<br> }<br><br> location ~* \.(html)$ {<br> root /tmp/nginx;<br> error_page 404 /404.html;<br> }<br><br>Бекенд возвращает ответ с "X-Accel-Redirect: /404".<br>/404 каталога нет и срабатывает error_page 404 и возвращается /404.html страница с 404 HTTP статусом.<br><br>Теперь добавим впереди memcached:<br><br> location / {<br> set $memcached_key "test:$uri";<br> memcached_pass unix:/tmp/memcached.sock;<br> default_type text/html;<br> error_page 404 = @fallback;<br> }<br><br> location @fallback {<br> proxy_pass <a href="http://0:5000;" target="_blank">http://0:5000;</a><br> }<br><br> location = /404 {<br> root /tmp/nginx;<br> error_page 404 /404.html;<br> return 404;<br> }<br><br> location ~* \.(html)$ {<br> root /tmp/nginx;<br> error_page 404 /404.html;<br> }<br><br>И в такой конфигурации, когда бекенд возвращает ответ с "X-Accel-Redirect: /404",<br>то nginx отдает не /404.html страницу, а свою внутреннюю.<br><br>Если же делать сразу "X-Accel-Redirect: /404.html", то не будет 404 статуса.<br><br>Какое есть решение для этой ситуации?<br><br>Кстати, вызов memcached можно даже убрать, достаточно оставить цепочку из двух error_page.<br>Такое ощущение, что если в процессе обработки запроса использовался именованный локайшен, то уже не обычные возврата нет.<br><br><br>
</div>
</div>
</div>
<br><hr>
</div>
</div>
</div>
<br><hr></BODY></HTML>