Retornando a resposta 404 original no Nginx quando o servidor legado também tem 404

2

Eu tenho essa configuração do Nginx funcionando principalmente do jeito que eu quero:

  1. tenta obter uma página do nó
  2. se houver um 404, tente obter a página da versão herdada do site em um host diferente
  3. se a versão herdada do site retornar 404, mostre uma página 404 do novo site (em vez da página 404 do site legado).

Nota: este é um modelo envsubst .

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_read_timeout 60;
    proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
    proxy_buffers 16 64k;
    proxy_buffer_size 2k;
    proxy_temp_file_write_size 64k;
    proxy_pass http://nodejs;

    proxy_intercept_errors on;
    recursive_error_pages on;
    error_page 404 = @legacy;

    location /404 {
        # serve up /404 from the node server
        internal;
        proxy_intercept_errors off;
        recursive_error_pages off;
        proxy_pass http://nodejs;
    }
}

location @legacy {
    # when we can't find a page on the new server, try to find it on the 
    # old web server. If still not found, show new site's 404 page.
    # NOTE: unfortunately, this can result in a 2nd call to our node
    # servers, even though we already have the response from them.
    proxy_pass ${LEGACY_URL};
    proxy_redirect default;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_intercept_errors on;
    recursive_error_pages on;
    error_page 404 = /404;
}

O problema é:

  1. Se houver um 404 no site legado, uma segunda solicitação será feita no backend do meu nó.
  2. Esse segundo pedido não terá as informações do caminho original, ele terá o / 404.

Qualquer maneira de obter o Nginx para retornar a resposta do nó original 404 neste momento?

    
por Seán Hayes 12.07.2016 / 01:17

0 respostas

Tags