Nginx的sendfile报无效参数分析

今天观察Nginx的错误日志,发现有一些客户端下载文件时,报下列错误。
[quote]
2010/07/17 09:26:53 [alert] 505#0: *764839 sendfile() failed (22: Invalid argument),
[/quote]
为了查出原因,在服务器上对此请求的IP进行抓包分析,发现原来是HTTP包头中的Range字段有问题。

请求包头中的Range字段信息:
[quote]
Range: bytes=281851-
[/quote]
回应包头中的信息:
[quote]
Content-Length: -77764
Content-Range: bytes 281851-204086/204087
[/quote]

分析原因:
因为前段时间,nginx的perl模块程序写的有问题,导致用户取得的文件大小大于实际文件的大小。现在用户请求的起始偏移量大于文件的实际大小,导致sendfile报出了无效参数的错误。

解决方法:
修改模块程序,对起始偏移量与实际文件大小进行比较判断。

版权声明:本文为iteye_5617原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。