学习
实践
活动
工具
TVP
写文章

有生之年又踩到了Tengine的Bug

今天新上线一个项目的时候用到了一个上传的接口,在本地测试和内网环境下都正常,上服务器以后一直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;,禁用代理缓冲

更多关于测试方面的文章,请前往51Testing软件测试网掌握哦~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180312A0I4JX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券