当前位置: > Linux服务器 > nginx >

nginx发布静态文件后图片显示不全

时间:2014-06-26 00:49来源:linux.it.net.cn 作者:IT网
部署nginx时,通过mount方式挂NFS文件后,发现大图片在浏览器显示时不完整,原因在于nginx中启用了sendfile。

1、sendfile系统调用,文件数据被copy至内核缓冲区
2、再从内核缓冲区copy至内核中socket相关的缓冲区
3、最后再socket相关的缓冲区copy到协议引擎


相较传统read/write方式,2.1版本内核引进的sendfile已经减少了内核缓冲区到user缓冲区,再由user缓冲区到socket相关缓冲区的文件copy,而在内核版本2.4之后,文件描述符结果被改变,sendfile实现了更简单的方式,系统调用方式仍然一样,细节与2.1版本的不同之处在于,当文件数据被复制到内核缓冲区时,不再将所有数据copy到socket相关的缓冲区,而是仅仅将记录数据位置和长度相关的数据保存到socket相关的缓存,而实际数据将由DMA模块直接发送到协议引擎,再次减少了一次copy操作。

遇到的问题是,图片只显示了上面的一半。

对于一个通过网络挂载了NFS文件系统的root /webroot(比如:NFS或SMB),内核可能无法可靠的通过自己的缓冲区服务于网络文件。
因此,如果出现以上情况,建议禁用sendfile吧。
(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容