Evitar nginx proxy_pass 302

1

Eu tenho dois blocos de servidor definidos no meu servidor para executar vários redirecionamentos. No exemplo simplificado abaixo, um redirecionamento 302 é emitido. Eu gostaria de fazer proxy desse pedido de forma transparente para o usuário.

Como posso fazer isso?

Quando eu uso um bloco de localização definido como location =/ a 200 é emitido como esperado.

http {
    server {
        server_name acme;
        listen 80;
        include mime.types;

        # http://acme/web/style.css -> http://127.0.0.1:8080/web/style.css
        location ~^/web/.*$ {
            proxy_pass http://127.0.0.1:8080;
        }

       # http://acme/style.css -> http://127.0.0.1:8080/acme/style.css
       location ~^(.+)$ {
           proxy_pass http://127.0.0.1:8080/acme$1;
       }
    }
}
    
por Jamie 21.01.2016 / 17:43

1 resposta

0

É possível que nginx intercepte o código de resposta 302 e processe internamente. Eu configurei um cenário de teste que funcionava usando isso:

location /some/uri/ {
    error_page 302 = @fallback;
    proxy_intercept_errors on;
    proxy_pass ...;
}
location @fallback {
    rewrite ^ /some/other/uri last;
}

Isso, é claro, seria uma interceptação geral sem levar em conta o valor dos cabeçalhos de resposta, mas isso pode ser adequado para sua necessidade. Consulte este e isto para mais.

    
por 22.01.2016 / 12:26

Tags