Exibição de páginas de erro HTTP / 5xx do aplicativo via Varnish

4

Eu estou trabalhando na execução de alguns aplicativos Rails através do Varnish para fornecer melhor suporte a cache, o qual, esperamos, será mais flexível do que as opções build-in-page em cache.

Um problema que tenho tropeçado é que quando um erro HTTP / 50x é retornado do servidor de aplicativos, o verniz não exibe a página de erro personalizada (por exemplo, quando o aplicativo rails gera uma exceção, renderizamos um modelo HTML de erro personalizado) em vez de ver a página de erro "agradável", vemos o seguinte texto:

Error 503 Service Unavailable

Service Unavailable

Guru Meditation:

XID: 828451354

Varnish cache server

Existe alguma maneira de passar o HTML buscado do servidor de back-end para o cliente? É tão fácil quanto implementar o método sub_error VCL e usar uma diretiva fetch or pass?

Obrigado.

    
por Matthew Savage 29.06.2010 / 10:27

1 resposta

5

Bem, eu tenho uma resposta - e, surpreendentemente, o problema não era que o verniz não estivesse transmitindo o conteúdo da resposta HTTP / 500.

O erro HTTP / 503 estava sendo gerado quando o Varnish estava expirando enquanto se conectava ao servidor backend, ou esperando que os bytes fossem enviados.

Basicamente, se a conexão com o backend foi bem sucedida, mas o backend não envia o primeiro byte sem um determinado período de timeout, ou há um atraso entre o envio de bytes, o Varnish irá timeout e retornará um erro HTTP / 503.

A solução é atualizar os valores de tempo limite (e, é claro, corrigir o servidor de back-end lento), como abaixo (conforme detalhado em: link :

backend www {
   .host = "www.example.com";
   .port = "http";
   .connect_timeout = 1s;
   .first_byte_timeout = 5s;
   .between_bytes_timeout = 2s;
}
    
por 07.07.2010 / 07:30