首页 > 其他分享 >记一次因HTTP协议版本导致后端服务响应502事故

记一次因HTTP协议版本导致后端服务响应502事故

时间:2023-08-29 19:31:47浏览次数:42  
标签:HTTP .... nginx 版本 error 服务 日志 502

一、前言

于今天即将下班之际,研发同时突然反馈某项目开发环境调用java后端服务出现502....据悉,就在前几天都是正常,今天发版上线之后就出现这种情况,而且故障出现之后根研发自行调用后端服务接口是没问题的....

随即我这边开始展开紧急处理

记一次因HTTP协议版本导致后端服务响应502事故_服务器

二、排查思路

首先对于502错误通常表示服务器作为网关或代理时从上游服务器接收到无效的响应。这意味着上游服务器无法提供有效的响应给网关服务器

分析502状态码,那些原因可能会导致这种情况的发生

网络问题:nginx负载器到后端服务端口不通,网络连接异常会导致

系统问题:前后端服务器的磁盘问题,也会间接性的导致502的发生

上面两种可能性是经常会发生了,第一时间做了排查,首先检查了前端代理到后端java服务的端口是否正常

如下图所示,网络连接是正常的,随后检查了两台服务器资源的,都没有问题

记一次因HTTP协议版本导致后端服务响应502事故_nginx_02

此时就感觉很奇怪,随后我个人尝试确认不走nginx这一层代理直接本地调用后端该接口从而判断后端服务是否异常

curl http://x.x.x.x:[后端java端口]/[接口路由]

果然,正如研发所说,它的后端java 服务是没有问题了(研发说,这个锅我可不背......

记一次因HTTP协议版本导致后端服务响应502事故_服务器_03

此时我陷入了深思,不是网络问题,不是系统问题,后端服务也正常....于是我进一步追踪了一下前后端的日志

我先看前端的nginx日志信息,检查一下前端的路由请求否正常打到后端

跟踪一下前后端日志,可以发现用户请求正常打到后端服务,说明nginx路由是没有问题的

记一次因HTTP协议版本导致后端服务响应502事故_服务器_04

记一次因HTTP协议版本导致后端服务响应502事故_nginx_05

百思不得其解,此时突然想到了nginx日志除了access日志,还有一个error日志,说不定在这上面找到一些蛛丝马迹....

于是乎立马查看了error.log

tail -f error.log

记一次因HTTP协议版本导致后端服务响应502事故_后端服务_06

嘿! 好家伙,果然露出了马脚....

2023/08/29 18:21:15 [error] 16200#0: *866959 upstream sent invalid chunked response while reading upstream,

问题显而易见, 看error说nginx上游读取上游时发送无效分块响应.....

三、解决问题

直接在nginx.conf配置加上

  proxy_http_version 1.1;即可

记一次因HTTP协议版本导致后端服务响应502事故_后端服务_07

四、问题总结:

这个问题与其说是nginx报错,不如说是不了解http不同版本之间特性的差异.而且要记住一点的是nginx代理后的默认http版本是1.0.如果原始请求是长连接或者分块传递,记得加上http1.1的参数...

标签:HTTP,....,nginx,版本,error,服务,日志,502
From: https://blog.51cto.com/u_11880730/7279614

相关文章

  • 开源.NetCore通用工具库Xmtool使用连载 - HTTP请求篇
    【Github源码】《上一篇》介绍了Xmtool工具库中的XML操作类库,今天我们继续为大家介绍其中的HTTP请求类库。在现如今的软件需求场景中,HTTP网络请求几乎是开发过程中必然会使用的功能;而系统自带的HTTPClient对象使用起来并不是那么容易和友好,因此我们对其进行了二次封装成了一个We......
  • 生信: 一起读官方文档 GATK2.1版本 篇
    一起读官方文档GATK2.1版本篇参考文章:GATK使用:https://www.plob.org/article/7070.htmlGATK介绍GATK做什么的?它主要用于从sequencing数据中进行variantcalling,包括SNP、INDEL。比如现在风行的exomesequencing找variant,一般通过BWA+GATK的pipeline进行数据分析。BWA......
  • go的net/http有哪些值得关注的细节
     原创 小白 小白debug 2023-08-1408:33 发表于上海收录于合集#go语言1个#面试17个#后端19个golang的net/http库是我们平时写代码中,非常常用的标准库。由于go语言拥有goroutine,goroutine的上下文切换成本比普通线程低很多,net/http库充分利用了这个优势,因此,它......
  • Chrome版本在115及以上ChromeDriver下载地址
    原地址:http://chromedriver.storage.googleapis.com/index.html中看到最新驱动版本为114,而Chrome的版本已经到116,使用驱动为114会报版本不匹配的错误解决方法:115及以上版本下载地址:https://googlechromelabs.github.io/chrome-for-testing/驱动下载地址中提示115及以上在另......
  • Http头Hostname攻击漏洞
    作者:Monyer链接:https://www.zhihu.com/question/67477221/answer/254009089来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。这本来是个简单得不能再简单的漏洞。不过遵循题主的诉苦,我去网上找了一圈,的确发现没有一个能把这个问题说清楚,把解决方案......
  • C# 获取Windows系统版本注意事项
    首先通过微软官方文档:https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version了解各个操作系统对应的版本号 下面介绍3种获取版本号的方式及弊端1. Environment.OSVersion.VersionOperatingSystemos=Environment.OSVersion;......
  • HTTP服务器项目面试题
    ......
  • 软件开发中的常见版本
    软件开发中的常见版本版本含义描述Alpha版本初期阶段基本功能未完成,存在严重缺陷,供内部测试和评估使用,不对外发布(核心功能有了,且主流程能跑通)Beta版本测试阶段主要功能已实现,但仍存在少量缺陷,邀请广泛用户参与测试,这阶段软件功能还不完善,会根据用户反馈加入新的......
  • 在tomcat上安装PFX格式证书部署https
    您可以在Tomcat服务器安装已签发的SSL证书,实现通过HTTPS安全访问Web服务。本文介绍如何在Tomcat服务器安装PFX格式的SSL证书。步骤一:在阿里云的域名管理后台,下载SSL证书登录数字证书管理服务控制台。在左侧导航栏,单击SSL证书。在SSL证书页面,定位到目标证书,在操作列,单......
  • python+playwright 学习-80 v1.37版本新增--full-page-screenshot 用例失败截长图
    前言--full-page-screenshot参数是pytest-playwright在使用,在失败时是否进行完整页面截图。默认情况下,仅捕获视口。需开启--screenshot开关(默认:off).用例失败截图环境准备:1.安装playwright最新v1.37版本2.安装pytest-playwright0.4.2版本用例示例fromplaywright.......