我正在Ubuntu 11.04上运行Apache2 Web服务器(服务器版本:Apache / 2.2.17(Ubuntu))。 我有一个问题,长时间运行的下载将在一段时间后失败。 我有客户与慢连接,这是我第一次发现这个问题。 如果我通过快速连接下载文件,它将正常工作。 在testing中,我一直在下载一个3GB的文件,同时限制我的wget到500K,并得到一致的失败。 但是,传送的时间或数据总是不同的。
我有两个不同的目录指令。 文件将从一个下载罚款,但不是其他。 两者之间的主要区别在于NFS是一个XSendFile指令。 一切工作正常,“下载”,但“vol1”有问题。
<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>
这里是从客户端使用wget的失败:
HTTP request sent, awaiting response... 200 OK Length: 3028287488 (2.8G) 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.
在这之后,wget会再次尝试,有时会得到一个416,有时是200.在下面的访问日志示例中,我得到了一个200,但是正如您所看到的,它认为文件已经被下载,因为返回的内容长度为250。 我有时在初始下载的时候注意到错误的内容有时以千字节返回有时〜200MB。 正如你可以看到我一直在testing的文件是3GB左右。
以下是访问日志中的故障:
[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)"
而对于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)"
我确实发现了一些关于在目录通过NFS时closuresSendFile的在线聊天,但是我已经通过NFStesting了其他系统挂载目录,它们工作得很好。
我的NFS挂载使用以下指令进行挂载:
defaults,vers=3,noauto