Até onde eu sei, o Nginx tenta automaticamente todos os servidores disponíveis - e se todos retornarem um erro, ele retornará o código de erro da última resposta.
proxy_next_upstream
apenas parece oferecer um controle melhor sobre quais erros serão processados e quais serão ignorados (mas o padrão já é qualquer 'erro' na conexão, envio ou recebimento - com, creio eu, anos 60 timeout).
De acordo com a documentação (o texto poderia usar algum trabalho):
"If with an attempt at the work with the server error occurred, then the request will be transmitted to the following server and then until all workers of server not are tested. If successful answer is not succeeded in obtaining from all servers, then to client will be returned the result of work with the last server."
Você pode verificar esse comportamento com um script que registra a hora (ou qualquer dado) em um arquivo e retorna 502. Se você encontrar apenas 1 linha registrada, o nginx não tentou vários servidores, se você encontrar duas linhas registradas isso aconteceu.