今天观察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报出了无效参数的错误。
解决方法:
修改模块程序,对起始偏移量与实际文件大小进行比较判断。
[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报出了无效参数的错误。
解决方法:
修改模块程序,对起始偏移量与实际文件大小进行比较判断。