error_page parece não funcionar com a diretiva nginx upstream

2

Estou tentando usar o nginx para balancear a carga de alguns servidores de aplicativos downstream e mostrar uma página de estilo "fail whale" se todos os servidores downstream estiverem off-line ou sem resposta. Infelizmente, a documentação do nginx diz que você não pode usar a diretiva backup em combinação com a diretiva ip_hash em um bloco upstream , então estou tentando criar uma alternativa.

Neste momento, os blocos relevantes na minha configuração são:

upstream appservers {
    ip_hash;
    server srv1:8080;
    server srv2:8080;
}

server {
    listen       80;

    location / {
        proxy_pass http://appservers;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 5s;
        error_page   502 503 504  http://failwhale.myapp.com;
    }
}

O problema é que, se eu desligar os dois servidores de aplicativos, quando o nginx retornar um erro 502 (gateway inválido), ele parecerá usar a página de erro 502 padrão (em vez de redirecionar para link (que também é servido por nginx e definitivamente está ativo).

Alguém sabe o que estou fazendo de errado ou se é para funcionar como eu espero? Se não, o que mais pode ser feito?

    
por glenc 10.06.2011 / 13:24

1 resposta

3

Descobri isso. Você precisa do proxy_next_upstream decl para pegar esses erros, a la:

location / {
    proxy_pass http://appservers;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 5s;
    proxy_next_upstream error timeout http_502 http_503 http_504;
    error_page   502 503 504  http://failwhale.myapp.com;
}
    
por 10.06.2011 / 14:51