Timeout HTTP DELETE entre Nginx e Application

2

Estamos enfrentando um erro muito estranho usando HTTP DELETE, o sintoma é ocasionalmente o usuário recebe um erro 504 (timeout) no navegador.

As solicitações fluem pelas etapas descritas abaixo:

Navegador - > Akamai - > AWS ELB - > Nginx - > Aplicativo da AWS ELB - > Aplicação

Reunimos o pedido. Identificamos que, quando o erro ocorre, a solicitação aparece no access.log do Nginx, mas não no log de acesso do aplicativo da AWB. Então, Nginx é o que retorna o tempo limite, aguarda 60 segundos e retorna 408. Olhando para o log de acesso e o log de depuração, parece que o Nginx está fazendo proxy do pedido para o aplicativo, mas a requisição não passa.

Continuar a solicitação com falha não aparece no servidor TCP Dump on Nginx.

Alguns fatos que reunimos:

  • O erro não acontece no Safari, mas acontece ocasionalmente no Chrome e no Firefox,
  • No firefox, se definirmos network.http.max-connections-per-server 10, o problema desaparece. Qualquer valor maior que esse (> 10) ele reverta.
  • Desativar o HTTP 2 no Akamai reduz o número de ocorrências do problema.
  • Parece que o problema só acontece com o verbo HTTP DELETE.
  • Tentamos apontar o Nginx diretamente para uma instância do aplicativo (ignorando o ELB), o problema persiste.

Parece que há algum problema com o gerenciamento da conexão persistente em nossa pilha. No entanto, nossa configuração parece correta, por exemplo keep alive timeout está correto, 300 segundos no Akamai, 302 no primeiro ELB, 304 no Nginx e assim por diante.

Também estou anexando o log de depuração Nginx da solicitação, para qualquer um interessado.

O pedido falhado neste caso é: DELETE / api / v2 / carrinho / ULBlIlptUun70M3h4cPm1t7Paos / line / 122555881 HTTP / 1.1

Log de depuração

Obrigado!

    
por Ricardo Mayerhofer 28.10.2015 / 21:16

0 respostas