Я использую nginx в качестве обратного прокси-сервера для поиска содержимого html из memcached, если он отсутствует, то node.js, если его нет, node.js возвращает 404. Я пытаюсь перехватить и доставить пользовательский страница для 404, возвращенная node.js
Проблема в том, что nginx не возвращает правильный 404.html, а возвращает его по умолчанию.
Итак, хотя я могу перехватить страницу 404, nginx выдает страницу ошибки по умолчанию, а не 404.html.
upstream memcached {
server 127.0.0.1:11211;
}
error_page 404 /404.html;
location /404.html {
internal;
}
location @memcached {
...
if ($memcached_request = 1) {
memcached_pass memcached;
error_page 404 502 504 = @nodejs;
}
if ($memcached_request = 0) {
error_page 404 502 504 = @nodejs;
}
}
location @nodejs {
proxy_pass http://127.0.0.1:7777;
...
error_page 404 /404.html;
proxy_intercept_errors on;
proxy_redirect off;
}
location / {
try_files $uri $uri/ @memcached;
error_page 403 = @nodejs;
}
Есть ли лучший способ сделать это «если не в memcached, перейти на node.js» вместо error_page 404 = @fallback? Если нет, есть ли способ поймать 404 с последнего бэкэнда?
Возможно, он не хочет перенаправлять на internal
расположение? Что, если вы снова попытаетесь перенаправить его в указанное место? Т.е. @404
?
В противном случае может показаться, что вам, возможно, придется включить recursive_error_pages
чтобы ваша установка работала.