Назад | Перейти на главную страницу

Перехват 404 с nginx в качестве обратного прокси для memcached + node.js

Я использую 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 чтобы ваша установка работала.