Http状态码502常见原因及排错思路
Http状态码502常见原因及排错思路
502表示Bad Gateway。当Nginx返回502错误时,通常表示Nginx作为代理服务器无法从上游服务器(如:我们的后端服务器地址)获取有效的响应。导致这种情况的原因有很多:
1、后端服务器故障
2、nginx配置问题
3、高负载或者资源耗尽
4、nginx与后端服务器通信问题
必出现502:应用挂了(服务端返回RST,nginx或者其他发出502报错)
偶尔出现502:CPU使用率高 / QPS增加 / nginx read超时时间设置问题
504 Gateway timeout 网关超时
1、一般指nginx做反向代理服务器时,所连接的服务器tomcat无响应导致的。
2、为了完成您的 HTTP 请求,该服务器访问一个上游服务器,但没得到及时的响应
3、nginx超过了自己设置的超时时间
502常见原因及排错思路
1. 后端服务器故障
检查后端服务器是否正常运行,网络连接是否正常。
可以通过 ping 命令检查网络连接:ping your_backend_server_ip
通过 telnet 命令检查后端服务器的端口是否开启:telnet your_backend_server_ip your_backend_server_port
通过 curl 命令测试后端服务器的响应:curl -I http://your_backend_server_url
2. 网关配置问题:代理地址、请求超时时间
以Nginx作为网关为例:
检查 Nginx 配置文件中的代理设置,确保代理到后端服务器的配置正确。
检查超时时间配置:proxy_read_timeout 2s; #vim /opt/nginx/nginx.conf
检查 Nginx 错误日志,查看是否有相关的错误信息:tail -f /var/log/nginx/error.log
3. 后端服务器高负载或者资源耗尽:某一时刻qps过高
# 可能是某一瞬间,服务器的qps过高导致502
可以使用 top 命令查看系统资源(CPU、MEM)使用情况
4. 网关与服务器通信问题(网络连接、端口开放等)
检查 Nginx 与后端服务器之间的防火墙设置,确保端口开放。
检查 Nginx 与后端服务器之间的网络连接是否正常,可以通过抓包工具(如 tcpdump)检查网络通信情况。
实战
今天测试反馈前端页面访问出错,因为我们前端是通过nginx请求到后端的,所以查看浏览器上查看网络请求,发现报502Bad Gateway。
:本文ip与端口等信息均以加密
1. 查看nginx.conf:观察是否是代理配置错误
首先想到是不是nginx的代理配置出了问题,结果发现nginx.conf配置文件是没有问题的,配置的代理也是正确指向我们后端服务的地址。
server {
listen 80;
location / {
proxy_pass http://localhost:6020;
}
location /backend-api {
rewrite ^/backend-api(.*)$ $1 break;
proxy_pass http://192.168.64.145;
}
}
查看能否ping通后端服务器,发现也是通的
ping 192.168.64.145
2. 查看/var/log/nginx/error.log:查看nginx报错信息
然后准备查看nginx的报错日志信息
tail -f /var/log/nginx/error.log
发现错误信息如下:
2023/11/12 11:07:26 [error] 49448#49448: *1998 connect() failed (111: Connection refused) while connecting to upstream, client: 10.3.0.52, server: , request: "GET /backend-api/list HTTP/1.1", upstream: "http://192.168.64.145:80/list", host: "10.16.13.137", referrer: "http://192.168.64.120/page/xx"
可以看出是nginx请求我们后端的服务器没有请求成功。
3. 检查后端服务是否正常运行
查看nginx请求的后端服务器是否正常工作
因为我们使用的是k8s部署服务,所以直接观察每个pod运行状态即可
# 查看服务pod是否是running状态
kubectl get pods -n xxx
运行命令后,发现处理服务的pod状态都是正常的。
然后想到nginx请求我们的是80端口,于是通过检查端口是否处于Listen状态即可
netstat -ano | grep 80
结果发现服务器上的80端口没有被过滤出来,马上联想到是不是80端口没有开放出来
firewall-cmd --zone=public --list-ports | grep 80
# 执行命令后发现FirewallD is not running
# 查看防火墙状态
systemctl status firewalld
# 发现防火墙已经是关闭状态(为了方便测试,暂时关闭),因此防火墙不会阻拦80端口的请求
这个时候突然想到是不是ingress问题,执行命令查看k8s event信息
# 发现是有报磁盘资源不足
kubectl get event
# 查看pod详细信息,包括event
# kubectl describe pod podName

# 查看所有节点状态
kubectl get pod -n kube-system -o wide
# kubectl get pods -A -o wide

发现配置的ingress pod被驱逐。
# 查看磁盘使用情况,清理对应磁盘之后发现ingress正常工作
df -h
转载:https://blog.csdn.net/weixin_45565886/article/details/134359080
Http状态码502常见原因及排错思路的更多相关文章
- Http状态码502问题复盘
问题原因分析:502 bade gateway 一般都是upstream出错,对于PHP,造成502的原因常见的就是脚本执行超过timeout设置时间,或者timeout设置过大,导致PHP进程长时间 ...
- HTTP 状态码(常见及分析)
首先得明白状态码的几个大类: 状态码 响应类别 出现原因 1XX 信息性状态码(Informational) 服务器正在处理请求 2XX 成功状态码(Success) 请求已正常处理完毕 3XX 重定 ...
- 深入分析HTTP状态码502(nginx+php-fpm)
我们的一个web项目,由于新上城市增多,导致访问量增大,DB压力增大,作为提供接口的业务方,最近被下游反馈大量请求"502". 502,bad gateway,一般都是upstre ...
- 那些代表性的HTTP状态码,你还只知道404吗?快来看看吧【转】
前言 在网络上发送请求后,经常会根据请求的状态码去判断请求的成功失败与否,常见的状态码有200,404,500. 不过你以为HTTP请求的状态码就只有这么几个么?其实是远远比这个多的. 今天这篇文章我 ...
- 服务器返回的14种常见HTTP状态码
当我们从客户端向服务器发送请求时 服务器向我们返回状态码 状态码就是告诉我们服务器响应的状态 通过它,我们就可以知道当前请求是成功了还是出现了什么问题 状态码是由3位数字和原因短语组成的(比如最常见的 ...
- (转)生产环境常见的HTTP状态码列表(老男孩整理)
生产环境常见的HTTP状态码列表(老男孩整理) 原文:http://blog.51cto.com/oldboy/716294 ##################################### ...
- JavaWeb前置知识 : 动态和静态的区别、两种架构、常见状态码
JavaWeb程序设计(一) : 前置知识 1.动态网页与静态网页的区别: a.不要和是否有"动感"混为一谈. b.是否随着时间.地点.用户操作的改变而改变 (例如 : 在百度上搜 ...
- HTTP协议 (六) 状态码详解
HTTP协议 (六) 状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了. 如果 ...
- HTTP协议状态码详解
HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了. 如果是做AJAX,REST,网络爬虫, ...
- HTTP状态码作用
文章目录 状态码分类 常见的状态码 1xx消息 2xx成功 3xx重定向 4xx客户端错误 5xx服务器错误 HTTP状态码的作用是:web服务器用来告诉客户端,发生了什么事. 状态码位于HTTP R ...
随机推荐
- Windows 包管理器
WinGet WinGet 是微软官方的软件管理器. 搜索 WinGet 包 常用命令 winget install <packaeg> # 安装包 winget uninstall &l ...
- 【测试平台开发】——04Flask后端api开发实战(一)
一.测试平台开发模式 要开发一套平台有两种开发模式,一个[大而全],一个[小而简]. 说道[大而全]想到目前大型项目都使用的语言[JAVA],[小而简]想到的是[Python]语言. 重武器(大而全) ...
- 最简!手把手带你完美删除Vmware虚拟机!
Vmware虚拟机最简完美删除教程 你还在苦于无法完美删除Vmware虚拟机吗?你还在为自己千疮百孔的系统而烦恼吗?你还在为想要重做Vmware但没删干净各种报错而烦操吗?但今天之后这些问题都将不是问 ...
- C语言输出格式工整的日历——2乘6样式(详见本文)
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码如不能在Dev-C++上完好运行,出现如下问题: E:\Dev-Cpp\源代码\万年历.c [Error] 'for' loop initia ...
- MRO, mixin的解读
本文试着将python中类继承中方法解析顺序MRO(method resolution order)和mixin梳理清楚 先MARK 类的继承中,super()的使用还是蛮多讲究的,因为看pytorc ...
- webpack笔记-webpack初识与构建工具发展(一)
为什么需要构建工具? 转换 ES6 语法 转换 JSX CSS 前缀补全/预处理器 压缩混淆 图片压缩 前端构建演变之路 ant + YUI Tool grunt gulp.fis3 webpack. ...
- 线段树 ----洛谷p3372
问题描述: 已知一个数列,对数列进行两种操作:1,对数列某个区间中的所有数加d:2,查询数列某区间的区间和 输入: 第一行输入两个整数n和m,分别代表数列中元素个数和对数列的操作次数,第二行输入n个用 ...
- Linux部署东方通TongWeb7
一.软件版本 操作系统: CentOS 7.5.1804 JDK:1.8_201 东方通:TongWeb7.0.4.2 二.部署流程 2.1 安装JDK 2.1.1 下载JDK并发明回到/opt下解压 ...
- Linux服务器磁盘空间占用情况分析与清理指南
为确保重大节日期间,团队负责的测试环境服务器磁盘不会占用过高,导致频繁报警.我们要求在重大节假日前对服务器磁盘占用情况进行检查.如果发现占用过高,则需人为介入,进行相应清理. 一.检查要求 查看各分区 ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(3)
1.问题描述: compatibleSdkVersion升级到5.0.0(12)之后,调用坐标系转换API:map.convertCoordinate(mapCommon.CoordinateType ...