O download de execução demorada do Apache falha

1

Estou executando um servidor web Apache2 (versão do servidor: Apache / 2.2.17 (Ubuntu)) no Ubuntu 11.04. Eu tenho um problema onde longos downloads em execução falharão depois de algum tempo. Eu tenho clientes com conexões lentas e foi assim que descobri o problema. Se eu baixar o arquivo pela minha conexão rápida, ele funcionará bem. Nos testes, tenho baixado um arquivo de 3GB, limitando meu wget a 500K e obtendo falhas consistentes. No entanto, a quantidade de tempo ou dados transferidos é sempre diferente.

Eu tenho duas diretivas de diretórios diferentes. Arquivos baixarão bem de um, mas não do outro. A principal diferença entre os dois é que é sobre o NFS e tem uma diretiva XSendFile. Tudo funciona bem com "download", mas "vol1" tem problemas.

  <Directory "download">
      PassengerEnabled off
      Options Indexes MultiViews
      AllowOverride None
      Order allow,deny
      Allow from all
  </Directory>

  <Directory "vol1">
      PassengerEnabled off
      Options -Indexes MultiViews
      AllowOverride None
      Order allow,deny
      Allow from all
      XSendFile on
      XSendFileAllowAbove on
  </Directory>

Aqui está a falha do cliente usando o wget:

HTTP request sent, awaiting response... 200 OK
Length: 3028287488 (2.8G) [video/mpeg]


33% [==============================>                                                               ] 1,025,449,932  295K/s   in 48m 39s

2013-01-17 18:02:17 (343 KB/s) - Connection closed at byte 1025449932. Retrying.

Depois disso, o wget tentará novamente e algumas vezes obterá um 416 e algumas vezes um 200. No exemplo de log de acesso abaixo, recebi um 200, mas como você pode ver, o arquivo já foi baixado porque um conteúdo de 250 foi retornado . Eu notei que às vezes no download inicial o comprimento do conteúdo errado era retornado às vezes ~ 200MB às vezes nos kilobytes. Como você pode ver, o arquivo que estou testando tem cerca de 3 GB.

Veja como a falha se parece no log de acesso:

[22/Jan/2013:13:59:22 -0500] "GET file.mpeg HTTP/1.1" 200 2533255750 "-" "Wget/1.13.4 (linux-gnu)"
[22/Jan/2013:15:22:02 -0500] "GET file.mpeg HTTP/1.1" 200 250 "-" "Wget/1.13.4 (linux-gnu)"

E para os momentos em que é um 416:

[22/Jan/2013:12:14:46 -0500] "GET file.mpeg HTTP/1.1" 200 1620176522 "-" "Wget/1.13.4 (linux-gnu)"
[22/Jan/2013:13:07:35 -0500] "GET file.mpeg HTTP/1.1" 416 638 "-" "Wget/1.13.4 (linux-gnu)"

Eu encontrei algumas conversas on-line sobre como desativar o SendFile quando o diretório está sobre o NFS, mas eu testei com outros sistemas montando um diretório sobre o NFS e eles funcionam muito bem.

Minha montagem do NFS é montada com as seguintes diretivas:

defaults,vers=3,noauto
    
por bmckim 22.01.2013 / 21:38

0 respostas