Nginx:upstream sent invalid chunked response while reading upstream

问题描述

测试人员反馈测试服务器文件下载接口不可用,请求接收不到响应。

在这里插入图片描述

这里先简单描述一下服务架构,对后续的问题排查有用。

内部服务部署在内网,提供对外的访问链接要求在公网,所以开放了服务器的一个端口到公网,外部请求通过开放的公网端口到达 Nginx 服务器,由 Nginx 服务器对外部请求进行代理转发。

问题排查

1、根据服务架构,首先直接通过内部IP端口访问内部服务,看服务是否正常。
2、内部IP端口访问服务正常,查看服务日志,看请求是否有正确代理到内部服务。
3、服务正常到达,但是响应异常org.apache.catalina.connector.ClientAbortException: java.io.IOException: 远程主机强迫关闭了一个现有的连接
4、猜测问题出在 Nginx 代理,查看 Nginx 的 access.log 和 error.log 日志文件。
5、找到对应请求路径,在 error.log 文件中定位到异常原因 upstream sent invalid chunked response while reading upstream

问题解决

upstream sent invalid chunked response while reading upstream 异常产生的原因是由于Http 协议版本不一致。

查看Nginx 的 access.log ,请求的协议为 HTTP/1.1 ,而Nginx代理的协议默认是 HTTP/1.0 ,不支持分块传输,所以导致 Nginx 抛弃了请求的响应,服务端发生IO异常,客户端丢失响应。

在代理的 server 或 location 模块里添加如下配置

# 设置代理协议为 HTTP/1.1 
proxy_http_version 1.1;
# 设置Connection 为空串,禁止传递头部到服务端
proxy_set_header Connection "";

重启 Nginx 服务。

nginx -s reload

重新访问服务,文件正常下载,问题解决。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值