Download de arquivo estático do navegador quebrando no verniz, mas funciona bem no Apache

1

Primeiramente gostaria de agradecer a todos em serverfault por este ótimo site e também venho a este site enquanto pesquiso no google por vários problemas e configurações relacionadas a servidores.

Eu também tenho um problema hoje e por isso estou postando aqui e espero que os idosos me ajudem. Eu configurei um site em um servidor dedicado há alguns dias e usei o Varnish 3 como o frontend do Apache2 em um servidor Debian Lenny, já que o tráfego era um pouco alto. Existem vários downloads de arquivos estáticos de cerca de 10-20 MB de tamanho no site. O site pareceu bem nos últimos dias após a instalação. Eu estava checando a partir de uma conexão de banda larga de 5mbps + e os downloads de arquivos também foram concluídos em segundos e funcionando bem.

Mas hoje percebi que, em uma conexão lenta com a Internet, os downloads de arquivos estavam acabando. Quando tentei baixar os arquivos do site usando um navegador, ele parou depois de um minuto. Ele continuou acontecendo de novo e de novo e por isso não teve nada a ver com a conexão com a internet. A conexão com a internet estava em torno de 512 kbps e, portanto, não era uma velocidade de nível de discagem, mas uma velocidade decente, na qual os arquivos deviam ser baixados com facilidade, embora não tão rápido.

Depois, pensei em testar a porta de back-end do apache e usei o número da porta para verificar se o problema ocorreu. Mas, em seguida, ao adicionar a porta do apache no URL de download do arquivo estático, os arquivos foram baixados com facilidade e não foram parados nem uma vez. Eu tentei várias vezes para se certificar de que não era uma coincidência, mas toda vez que eu estava usando a porta apache no arquivo download url então ele estava baixando bem enquanto ele estava quebrando cada vez com o link normal que foi encaminhado através de verniz eu suponho . Então, parece que o Varnish de alguma forma resultou em downloads de arquivos quebrados.

Alguém poderia dar uma idéia do porquê e como consertar o problema?

Para mais esclarecimentos, veja este exemplo:

Apache backend set na porta 8008, frontend Varnish definido na porta 80

Agora, quando eu baixar, diga

link

Em seguida, o download é interrompido após um minuto ou mais. Eu não posso ter certeza que é devido ao tempo ou tamanho e eu estou apenas assumindo. Pode ser outro motivo também.

Mas quando eu faço o download usando:

link

Em seguida, o download do arquivo não é interrompido e o download é feito corretamente.

Então, parece que o verniz está, de alguma forma, criando a quebra do download de arquivos e não o apache. Alguém tem alguma idéia de por que isso está acontecendo e como pode ser corrigido. Qualquer ajuda seria muito apreciada.

E meu verniz default.vcl é

    backend apache {
      set backend.host = "127.0.0.1";
      set backend.port = "8008";
    }

    sub vcl_deliver {
      remove resp.http.X-Varnish;
      remove resp.http.Via;
      remove resp.http.Age;
      remove resp.http.Server;
      remove resp.http.X-Powered-By;
    }
    
por Ron 25.06.2011 / 19:12

1 resposta

1

Você está atingindo o limite send_timeout do Varnish. O valor padrão para send_timeout foi 600s, com o Varnish 3.0 foi alterado para 60s. Isso pode interferir com downloads que levam mais de 60 anos.

Você pode verificar o valor do parâmetro send_timeout com o varnishadm:

varnishadm param.show send_timeout

Isso produzirá algo como:

send_timeout           60 [seconds]
                       Default is 60
                       Send timeout for client connections. If the HTTP
                       response hasn't been transmitted in this many
                       seconds the session is closed. 
                       See setsockopt(2) under SO_SNDTIMEO for more
                       information.

                       NB: This parameter may take quite some time to
                       take (full) effect.

Você pode configurá-lo para 600s com:

varnishadm param.set send_timeout 600s

Para tornar esta configuração persistente, você precisa adicionar "-p sendtimeout 600" aos parâmetros de inicialização do Varnish. Isso depende da distribuição que você está usando. No caso do Debian / Ubuntu, você pode querer editar / etc / default / verniz.

    
por 16.06.2012 / 22:41