Nginx: use o uwsgi_pass com um fallback proxy_pass?

1

É possível configurar o Nginx como proxy para um servidor uwsgi ( uwsgi_pass ), voltando para um proxy http padrão ( proxy_pass ) se o servidor uwsgi não estiver disponível?

Meu ambiente de desenvolvimento é executado como um servidor HTTP padrão em uma determinada porta, mas na produção ele será executado sob um soquete uWSGI. Eu gostaria de ser capaz de desenvolver o meu aplicativo, então (ainda na minha máquina de desenvolvimento) iniciar o aplicativo em um servidor uwsgi para teste sem ter que mudar minha configuração nginx bem cada vez. Se o nginx puder ser configurado para tentar com o uwsgi_pass, mas se tiver um erro (porque o servidor uwsgi não está em execução) retornar ao proxy_pass, isso seria o ideal.

Também pude ver isso sendo útil em um ambiente de produção: normalmente, apenas proxy para o soquete uwsgi local, mas se por algum motivo não estiver funcionando (por alguma definição arbitrária de não funcionar), proxy para algum servidor http secundário em algum lugar outro. No entanto, para mim, por enquanto, é apenas para tornar o desenvolvimento mais conveniente.

    
por ibrewster 26.08.2016 / 18:18

1 resposta

3

Supondo que você receba um erro de tempo limite 502 do backend do uWSGI, o seguinte deve fazer o que você está procurando.

uwsgi_intercept_errors on;
error_page 502 = @fallback;

location / {
    uwsgi_pass uwsgi://192.168.0.1:9000;
    <rest of your config>
    }

location @fallback {
    proxy_pass http://192.168.0.2;
    <rest of your config>
    }

Obviamente, substitua seus próprios valores, mas essas são as partes importantes. Se você achar que obteve uma resposta http diferente, poderá editá-la conforme necessário.

    
por 27.08.2016 / 21:37