有生之年又踩到了Tengine的Bug

发表于:2018-3-12 11:06

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Freyja    来源:bangbang93.blog

  今天新上线一个项目的时候用到了一个上传的接口,在本地测试和内网环境下都正常,上服务器以后一直504,应用log显示文件没有被上传上来,而浏览器log却显示文件正常上传。
  初步推断是tengine上没把请求转发完全,导致后端一直在等待剩下的body,直到90s超时。
 
  于是在服务器上架起了ssh隧道,通过本地直传服务器,就能够正常上传,于是将问题确定在了反代的tengine上
  最初以"nginx proxy_pass post 504"为关键字,在Google上搜索,有说设置proxy_http_version 1.1并且加proxy_set_header Connection "keep-alive";就正常了的,上调各种timeout也肯定不是我这里的问题,毕竟文件只有几十KB。
  没辙了,抓包吧,不抓不知道,一抓吓一跳
  
  boundary居然丢了,正常情况下的multipart/form-data应该至少有一对boundary,就像浏览器中显示的
  
  两个boundary夹着文件一起上传,而boundary的丢失导致请求实际长度和content-length对不上,所以后端一直在等待tengine把省下的请求发送过去,那么继续Google
  结果翻到了这个issue
  https://github.com/alibaba/tengine/issues/1003
  最后回复两天前
  正好前阵子tengine刚升级到2.2.2,我在厂里也起了http2,所以用最新的tengine重新编译了,结果正好撞上了这次的bug
  目前的临时解决方案是proxy_request_buffering off;,禁用代理缓冲
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号