项目场景:

服务端配置了nginx代理,为客户端请求做数据转发下载文件


问题描述:

服务端和nginx部署好之后,通过postman测试一个文件下载接口,发现没有任何响应。这时查看服务端日志发现请求有进来,且正常返回,但是postman测试却没有任何回复,见鬼了。


原因分析:

以上是为了烘托气氛,为下文做铺垫,不要慌,其实正常人都知道从nginx排查…

查看了nginx日志,当场好家伙,发现以下错误日志:

2021/06/01 15:24:27 [error] 3986#0: *990083 upstream sent invalid chunked response while reading upstream, client: xxx.xxx.xx.x, server: xxx.xxx.xx, request: “GET /api/server/download?fileKey=990aa1bc5e HTTP/1.1”, upstream: “http://xx.xxx.xxx.x:8080/api/server/download?fileKey=990aa1bc5e”, host: “xxxx.xxx.xx”

抓取以下关键错误信息:
upstream sent invalid chunked response while reading upstream
HTTP/1.1

通过网上查找发现问题,nginx在代理是默认http版本为1.0,由于文件的下载涉及到使用分块传递,但http1.0是不支持这个特性的。所以服务端为1.1版本无法进行转发


解决方案:

只要在nginx配置的location模块里面加上proxy_http_version 1.1就可以了,完美

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐