Interceptando 404 com nginx como proxy reverso para memcached + node.js

2

Estou usando o nginx como um proxy reverso para procurar conteúdo html do memcached, se não presente, depois node.js, se não estiver lá, node.js retorna 404. O que eu estou tentando fazer é interceptar e entregar uma página personalizada para o 404 retornado por node.js

O problema é que o nginx não retorna o 404.html correto, mas é o padrão.

Então, enquanto eu posso interceptar a página 404, o nginx entrega a página de erro padrão, não 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;
}

Existe uma maneira melhor de fazer isso "se não estiver no memcached, vá para node.js", em vez da error_page 404 = @fallback? Se não, existe uma maneira de pegar o 404 do último backend?

    
por dBi 15.01.2014 / 14:25

1 resposta

1

Talvez não queira redirecionar para um local internal ? E se você tentar redirecioná-lo para um local nomeado novamente? Ou seja @404 ?

Senão, pode parecer que você precisa ativar recursive_error_pages para que sua configuração funcione.

    
por 22.01.2014 / 00:22