解决 nginx 重复请求问题

在我们的一个页面请求中,在 chrome 浏览器中查看只是发出了一个请求,但在我们的服务日志上发现了多次请求,而且每次间隔 60s 。 最终,页面会显示 504 错误,服务端并没有返回任何数据。

服务端的日志如下

20220922221348

由于服务前面是有 nginx 通过反向代理请求的。这块很容易想到 proxy 的超时设置。 所以设置如下

但是设置完,问题并没有解决,还是会出现多条请求,而且请求间隔还是 60s 。 我们把目标转向了 nginx access log 。我们可以设想,如果是服务的 nginx 的配置问题, 那么 acess log 应该只有一条数据,后面的请求会有多条数据。但是查看 access log , 和我们的设想不一样,也是出现了多条请求日志。

也就是说服务所在的 nginx 也是被动的收到了多条请求,从而请求了服务。从 access log 上看返回码是 499, 也就是说上游客户端主动断开了连接。

我们重新梳理了服务的整体架构,发现问题可能出在 nginx ingress 上。 Ingress 本质上也是由 nginx 控制,通过 nginx 转发到后端服务上,又是一个反向代理。

image-20220923153842201

登录到 k8s 上查看 ingress 的相关配置。

7163191E-6858-40B4-8CC9-6BE969FF20B3

发现 proxy 的超时设置的是 60s , 而且会重试 3次, 和我们看到的现象是完全一致。 我们需要做的就是调整 ingress 的配置。

我们通过 这里 可以看到调整 ingress nginx 的几种方式。 我们调整了全局配置。 通过设置 config map , 然后配置会自动更新。 再次进行服务请求,问题解决。

此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。