线上Nginx跳转存在的接口返回异常问题

问题描述

最近一次上线本来是个很简单的功能,却被折腾了一宿,痛苦不堪啊!问题是这样的,线上发布完成以后,发现登录接口无法正常返回数据,但该接口涉及到的代码却根本就没有更改。

问题排查

出现这个问题,首先想到的肯定是接口是否出现了问题。于是开始对这个接口进行测试验证,经过在本机和测试环境验证,该接口不存在任何问题,但调用线上的接口却出现问题,无数据返回。使用chrome浏览器调试,发现接口返回“net::ERR_EMPTY_RESPONSE”这样的错误信息。于是从这个错误信息开始排查。上网上搜索相关信息,没有非常好的解决方法。

后来,对后台接口日志进行监控,发现偶尔会出现connection reset的异常信息,并且还发现前端调一次接口,后端日志却显示该接口被调用了两次。发现这些规律后,笔者开始对线上环境的服务器调用方式进行了解。经过与运维了解,线上环境是通过Nginx进行转发请求。笔者开始注意chrome浏览器中的请求情况,发现客户端请求Nginx不存在问题,但Nginx转发请求到接口服务器就出现了问题。发现这个现象后,笔者请运维确认Nginx是否存在异常情况,被告知没有异常。但是运维对Nginx服务器进行重启,笔者再次进行测试,问题无法复现。