错误提示
错误直译过来是内容长度不匹配,就是http response header中的content-length与实际接收的内容大小不一致导致。
排查过程
百度了很多,大多数是因为nginx的临时文件夹没有权限导致;通过wireshark抓包,看到是服务器端断开连接;最后想到最近虚拟服务器故障过,重启后,可能临时文件夹没有写入权限导致,最终确认是这个情况。但有必要了解一下nginx buffer机制
nginx buffer
proxy_buffers和proxy_temp_file
- 如果启用了buffer,nginx会尽可能的从proxied server读取response,将response保存到buffer(proxy_buffer_size and proxy_buffers ),如果buffer不够,则会写入磁盘的temporary file(proxy_max_temp_file_size and proxy_temp_file_write_size),然后再传给客户端;
- 默认的,临时文件夹在nginx_home/temp/proxy_temp
- proxy_buffer_size,用来存储收到的response 的第一部分,通常是response header
- proxy_buffering,指定了缓存数量和大小。
- 如果禁用buffer,只要nginx收到response,就会同步传给客户端;nginx不会尝试读取整个response,能读取的response大小由proxy_buffer_size 决定;
禁用buffer
proxy_buffering off;
博客讨论了HTTP响应中Content-Length与实际内容大小不符的问题,通常由服务器端断开连接引起。作者通过Wireshark抓包定位问题,并发现是虚拟服务器重启后,Nginx临时文件夹权限问题。文章详细阐述了Nginx的buffer机制,包括proxy_buffers、proxy_temp_file等配置,解释了如何在启用和禁用buffer情况下处理响应。解决方案是检查并修复Nginx临时文件夹权限。
2050

被折叠的 条评论
为什么被折叠?



