Temos uma situação em que um site começa a servir um 502 Bad Gateway, mas parece não recuperar depois que os servidores upstream se recuperam. O servidor nginx é configurado para solicitações de balanceamento de carga / proxy para dois servidores upstream. Parece que o servidor de banco de dados começará a obter uma média de carga alta, fazendo com que os servidores da Web (servidores upstream) exibam o conteúdo lentamente e o tempo limite (de acordo com o servidor nginx). O Nginx servirá então um 502, o que faz sentido, dada a situação.
O que é estranho, porém, é que parece que o nginx não atende quando os servidores da web se recuperam e devemos reiniciar o nginx para que ele comece a servir o site novamente. Existe uma boa maneira de corrigir isso? Eu estou olhando através das configurações de proxy atualmente para ver se há algo para definir, mas não ter muita sorte em encontrar alguma coisa.
Olhando para os logs nginx, vemos entradas como (apenas três exemplos de erros neste período):
2013/06/12 13:53:40 [error] 29840#0: *258391 upstream timed out (110: Connection timed out) while reading response header from upstream, client: n.n.n.n, server: www.example.org, request: "GET / HTTP/1.1", upstream: "http://n.n.n.n:80/", host: "www.example.org"
2013/06/12 13:54:11 [error] 29840#0: *261105 no live upstreams while connecting to upstream, client: n.n.n.n, server: www.example.org, request: "GET /HTTP/1.1", upstream: "http://example_rack/", host: "www.example.org"
2013/06/12 13:54:46 [alert] 29840#0: *261470 stalled cache updating, error:0 while closing request, client: n.n.n.n, server: n.n.n.n:80